1.枚举定义:
typedef NS_ENUM(NSInteger,JFType) {
JFOneType = 1,
JFTwoType,
}
2.适配64bit,将类型转换的影响降到最低:
int - > NSInteger
unsigned - > NSUInteger
float - > CGFloat
动画时间 - > NSTimeInterval
这些都是SDK中定义的类型,而我们大部分时间都在和SDK的Api打交道,使用它们能将类型转换的影响降到最低。
3.Objective-C中有Designated和Secondary初始化方法的概念,Designated方法是提供所有的参数,而Secondary方法是提供部分参数,其他参数以默认的形式提供
4.使用weak的情况,weak是ARC中才会出现的,和strong修饰符相对应,都是用于修饰对象的,一般在可能出现循环应用的地方使用weak,比如block,代理,还比如,自身已经对它进行了一次强引用,后面又需要引用时,比如IBOutlet中。
5.Copy一般用用于修饰NSArray,NSDictionary,NSString等含有可变子类型的对象,因为如果使用strong修饰,只是会让这个对象的引用计数器+1,当我们不小心将这个指针指向一个变数子类时,当这个子类发生变化时,可能会造成修改对象的值。当使用Copy修饰可变对象时,会产生一个不可变对象,当调用可变对象的方法时,编译不会报错,但运行时就会找不到方法。_name = [name copy];
6.@property本质就是ivar+getter+setter,分别是实例变量+setter方法+getter方法,系统会自动为实例变量生产getter和setter方法。
property在runtime中的本质是objc_property_t,属于结构体,包含attribute和name两个属性,而attribute的本质是objc_property_attribute_t,用于定义property中的属性如类型,原子属性,内存语义,实例变量,T类型,C代表copy,N代表nonatomic等。