iOS 进阶之路 2

来源:互联网 发布:网络与信息安全论文 编辑:程序博客网 时间:2024/06/03 19:39
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 )

0 0
原创粉丝点击