iOS 小经验 02

作者: Baoy的简书 | 来源:发表于2016-09-20 16:00 被阅读31次

1.属性

assign : 纯量类型 例如 : CGFloat

strong : “拥有关系” 为这种属性设置新值时候,设置方法会先保留新值,并释放旧值,然后将新值设置上去

weak : “非拥有关系” 为这种属性设置新值时候,既不保留新值,也不释放旧值。属性所指的对象遭到摧毁时,属性值也会清空

unsafe_unretained : 不安全,当目标对象遭到销毁时,属性值不会自动清空,这一点和weak有区别

copy : 与strong类似,然而设置方法并不保留新值,而是将其 copy

2.在对象内部尽量直接访问实力变量

比较合理折中的方案: setter 方法时 用 self.xxx 因为这样可以控制对属性的写入操作;getter 方法时 最好用 _xxx 直接访问。

对于不经常用到的可以使用懒加载 访问

3.对象等同性:

想检测对象的等同性,请提供“isEqual:” 与 hash 方法

可以为自己的特定类定制等同性方法

- (BOOL) isEqualToPerson:( Person* )otherPerson{

if ( self == object ) return YES;

if ( ! [ _firstName isEqualToString:otherPerson.firstName ] ){

return NO;

}

…..

return YES;

}

4.“类族模式”

typededf NS_ENUM( NSUInteger, MKMYEmployeeType ){

MKMYEmployeeTypeDeveloper,

MKMYEmployeeTypeDesigner,

MKMYEmployeeTypeFinance,

};

+( MKMY )employeeWithType:( MKMYEmployeeType )type{

switch ( type ){

case MKMYEmployeeTypeDeveloper :

return [ MKMYEmployeeTypeDeveloper new ];

break;

case ...

// 在switch判断是枚举类型的时候,最好不用用defualt,因为这样在新增加枚举类型的时候,Xcode会报出警告

}

5 runTime语句

(1)发送消息: id returnValue = objc_msgSend( someObject,

@selector( messageName: ),

parameter);

第一个参数表示消息的接受者,第二个参数代表选择子,后续可以传多个参数

(2)“黑盒测试” : 交换方法 void method_exhangeImplementations( Method m1, Method m2 )

此函数的两个参数表示待交换的两个方法实现,方法的实现:

Method class_get女生探测Method( Class aClass , SEL aSelector )

github:Baoy

相关文章

网友评论

    本文标题:iOS 小经验 02

    本文链接:https://www.haomeiwen.com/subject/epjoettx.html