1.在类中的init的方法里,应该使用_value而不用self.value的形式访问变量,因为初始化正在进行中,对象还没有完成构造,所以不能确定实例变量都能有效的赋值
2.首先特定的init初始化方法需要调用父类的特定init方法,然后其他的init方法都调用这个特定的init方法
如果子类声明的特定init方法和父类的特定init方法不一样,就需要子类覆写(override)父类的特定init方法并调用子类已有的特定init方法
3.在类方法里应该使用self来代替类名,使得他的子类也可以同样的发送消息
+ (instancetype)randomItem
{
BNRItem *newItem = [[self alloc] initWithItemName:randomName valueInDollars:randomValue serialNumber:randomSerialNumber];
return newItem;
}
4.Objective-C中的array只能保存OC对象,所以不能添加基础类型和C语音的结构体,可以先将这些数据转化成OC的NSNumber、NSValue、NSData后添加到array中
不能将nil添加到array中,但是可以用NSNull对象,NSNull表示对象已经为nil,一般被用来做特殊操作
[items addObject:[NSNull null]];
5.unrecognized selector sent to instance 0x100117280’ 这个错误表示该实例中没有想要调用的方法
(You sent a message to an object, and the object does not implement that method)
6.OC中没有命名空间(namespace),而是使用在类名上添加前缀的方式
NS前缀代表NeXTSTEP公司
7.#import and @import
OC会预编译一些系统库并缓存,避免每次在头文件中引用这些库的时候都需要重新编译一次,所以在调用系统库的头文件时可以使用@import Foundation的方式