Objective-C 基础(一)
Class and Object
#import <Foundation/Foundation.h> @interface Car : NSObject { int year; NSString *make; NSString *model; } - (void) setMake:(NSString *) aMake andModel:(NSString *) aModel andYear: (int) aYear; - (void) printCarInfo; - (int) year; @end
1.类首字母要大写,方法则小写,另外OB C 通常对方法是用驼峰命名法(如identifiersLikeThis),方法用-开始定义;
2.@interface 和 @end 是接口的开始与结尾, 变量放在{ }之间;该示例里面, 整形 int, 字符类型NSString(NSString属于Cocoa Touch object library,可以获得字符串的长度、进行查找、反向、获取文件名后缀。。。);
3.setMake:andModel:andYear 是一个带三个参数的方法,调用方式 [myCar setMake:c1 andModel:c2 andYear:i];
4.OB C里面通常用#import 来导入头文件而不是 #include, 因为#import 可以自动跳过已经导入的文件而不会重复导入;
Creating Objects
1.OB C里面方法的调用形式为 [object message];
2.创建对象用alloc 分配内存,再init 来初始化对象;上述例子里面,初试一个Car对象占用16bytes空间,其中两个指针各占4bytes,一个整形int 占4bytes,继承 NSObject也占 4 bytes, 所以一共需要 16bytes空间;
NSObject *object = [[NSObject alloc] init]; Car *myCar = [[Car alloc] init]; // This returns 4, the size of an object pointer printf("object pointer: %d\n", sizeof(object)); // This returns 4, the size of an NSObject object printf("object itself: %d\n", sizeof(*object)); // This returns 4, again the size of an object pointer printf("myCar pointer: %d\n", sizeof(myCar)); // This returns 16, the size of a Car object printf("myCar object: %d\n", sizeof(*myCar));
Releasing Memory
在OB C里面,释放内存有automated reference counting (ARC)和manual retain/release(MRR)两种机制,
MRR需要手工指定来释放一个对象 [object release]; IOS5开始则可以使用ARC来自动释放对象;
Understanding Retain Counts with MRR
在OB C里面,每一个对象都有一个保留数,在非ARC编译的项目里面,可以通过[object retainCount]来显示该对象的保留数,通常每个未销毁的保留数都是1,对于已经释放的对象变量,最好习惯是把其指针指向 nil,从而避免释放后产生的非法访问错误;