接口和实现
在Objective里完成的文件被称为界面文件,该类文件的定义被称为实现文件。
一个简单的界面文件MyClass.h将如图所示:
@interface MyClass:NSObject{ // 类变量声明 } // 类属性声明 // 类方法和声明 @end
执行MyClass.m文件,如下所示
@implementation MyClass // 类方法定义 @end
创建对象
完成创建对象,如下所示
MyClass *objectName = [[MyClass alloc]init] ;
方法(methods)
Objective C中声明的方法如下所示:
-(returnType)methodName:(typeName) variable1 :(typeName)variable2;
下面显示了一个示例:
-(void)calculateAreaForRectangleWithLength:(CGfloat)length andBreadth:(CGfloat)breadth;
在同一类中调用此方法,我们使用下面的语句。
[self calculateAreaForRectangleWithLength:30 andBreadth:20];
正如上文所说的andBreath使用有助于我们理解breath是20。Self用来指定它是一个类的方法。
类方法(class methods)
直接而无需创建的对象,可以访问类方法。他们没有任何变量和它关联的对象。示例:
+(void)simpleClassMethod;
它可以通过使用类名(假设作为MyClass类名称)访问,如下所示:
[MyClass simpleClassMethod]; //使用类名
实例方法
可以创建的类的对象后只访问实例方法,内存分配到的实例变量。实例方法如下所示:
-(void)simpleInstanceMethod;
创建类的对象后,它可以访问它。如下所示:
MyClass *objectName = [[MyClass alloc]init] ; //创建类的对象 [objectName simpleInstanceMethod]; //访问实例方法
Objective C的重要数据类型
序号 | 数据类型 |
---|---|
1 | NSString字符串 |
2 | CGfloat 浮点值的基本类型 |
3 | NSInteger 整型 |
4 | BOOL 布尔型 |
打印日志
NSLog用于打印一份声明,它将打印在设备日志和调试版本的控制台和分别调试模式上。
如 NSlog(@””);
控制结构
除了几个增补的条款外,大多数的控制结构与C以及C++相同
属性(properties)
用于访问类的外部类的变量属性
比如:@property(非原子、强)NSString*myString
访问属性
可以使用点运算符访问属性,若要访问上一属性可以执行以下操作
self.myString = @"Test";
还可以使用set的方法,如下所示:
[self setMyString:@"Test"];
类别(categories)
类用于将方法添加到现有类。通过这种方法可以将方法添加到类,甚至不用执行文件,就可以在其中定义实际的类。MyClass的样本类别,如下所示:
@interface MyClass(customAdditions) - (void)sampleCategoryMethod; @end @implementation MyClass(categoryAdditions) -(void)sampleCategoryMethod{ NSLog(@"Just a test category"); }
数组
NSMutableArray 和 NSArray 是 ObjectiveC 中使用的数组类,前者是可变数组,后者是不可变数组。如下:
NSMutableArray *aMutableArray = [[NSMutableArray alloc]init]; [anArray addObject:@"firstobject"]; NSArray *aImmutableArray = [[NSArray alloc] initWithObjects:@"firstObject",nil];
词典
NSMutableDictionary和NSDictionary是Objective中使用的字典,前者可变词典,后者不可变词典,如下所示:
NSMutableDictionary*aMutableDictionary = [[NSMutableArray alloc]init]; [aMutableDictionary setObject:@"firstobject" forKey:@"aKey"]; NSDictionary*aImmutableDictionary= [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:@"firstObject",nil] forKeys:[ NSArray arrayWithObjects:@"aKey"]];
AppDelegate.h
// Header File that provides all UI related items. #import <UIKit/UIKit.h> // Forward declaration (Used when class will be defined /imported in future) @class ViewController; // Interface for Appdelegate @interface AppDelegate : UIResponder <UIApplicationDelegate> // Property window @property (strong, nonatomic) UIWindow *window; // Property Viewcontroller @property (strong, nonatomic) ViewController *viewController; //this marks end of interface @end
代码说明
- AppDelegate调用UIResponder来处理Ios事件。
- 完成UIApplication的命令,提供关键应用程序事件,如启动完毕,终止,等等
- 在iOS设备的屏幕上用UIWindow对象来管理和协调各种视角,它就像其它加载视图的基本视图一样。通常一个应用程序只有一个窗口。
- UIViewController来处理屏幕流
AppDelegate.m
// Imports the class Appdelegate's interface #import "AppDelegate.h" // Imports the viewcontroller to be loaded #import "ViewController.h" // Class定义开始 @implementation AppDelegate // Following method intimates us the application launched successfully // 加载成功时执行 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { /* 应用从前台进入后台,发生在被一些状况临时打断时(当电话打来或者接收短信时)或者用户退出应用使应用进入后台运行时。 在这个方法中设置暂停进行中的事件,暂停计时或关闭图形帧数处理。游戏应该在这里设置暂停。 This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.*/ } - (void)applicationDidEnterBackground:(UIApplication *)application { /* Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.*/ } - (void)applicationWillEnterForeground:(UIApplication *)application { /* Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.*/ } - (void)applicationDidBecomeActive:(UIApplication *)application { /* Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.*/ } - (void)applicationWillTerminate:(UIApplication *)application { /* 应用终止时,按需保存数据。 Called when the application is about to terminate. Save data if appropriate. 参考 applicationDidEnterBackground:. */ } @end
代码说明
- 此处定义UIApplication。上面定义的所有方法都是应用程序UI调动和不包含任何用户定义的方法。
- UIWindow对象被分配用来保存应用程序分配对象。
- UIController作为窗口初始视图控制器
- 调用makeKeyAndVisible能使窗口可见
ViewController.h
#import // Interface for class ViewController @interface ViewController : UIViewController @end
代码说明
- ViewController类继承UIViewController,为iOS应用程序提供基本视图管理模型。
ViewController.m
#import "ViewController.h" // Category, an extension of ViewController class @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
代码说明
- 在这里两种方法实现UIViewController类的基类中定义
- 初始视图加载后调用viewDidLoad中的安装程序
- 在内存警告的情况下调用didReceviveMemoryWarning