美文网首页
@synthesize Category Extension I

@synthesize Category Extension I

作者: 月咏蝴蝶 | 来源:发表于2015-12-11 16:09 被阅读75次

    1. @synthesize

    @property (strong, nonatomic, readonly) NSArray *selectArray

    SDK高的版本不用实现 synthesize

    @synthesize selectArray;  // 实现变量的setter和getter方法

    @synthesize selectArray = _selectArray;

    :(这个只是一个变量,你可以设置成___selectArray,系统默认为_propertyName),_selectArray变量的改变不收约束

    readonly:屏蔽setter和getter方法

    因为是selectArray 拥有readonly属性,self.selectArray无法修改值,但是可以用_selectArray可以修改值。 

    @synthesize selectArray = _selectArray 这个写法只是让你把变量_selectArray跟selectArray属性指向同一个内存,而self.selectArray受到(strong, nonatomic, readonly)的约束,导致无法修改值,因为self.selectArray改变是通过setter和getter方法改变,setter和getter方法又受到(strong, nonatomic, readonly)的限制。

    另外一点:

    @interface ViewController (){

     NSString *city_name;

     NSString *city_province;

    }

    大括号括起来的是instance variable(实例变量),只是简单的数值,不能绑定get/set方法,不能自动retain/copy/atomic,就相当于一个简单的跟着instance走的局部变量。

    2. Category

    利用Objective-C的Runtime机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的class添加方法,包括那些没有源代码的类(如某些框架类)。

    (1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。

    (2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。

    3. Extension

    (1)形式上来看,extension是匿名的category。

    (2)extension里声明的方法需要implementation中实现,category不强制要求。

    (3)extension可以添加属性(变量),category不可以。

    注:平时在.m文件里声明私有变量和私有方法,其实就是用了Extension的属性

    4. Inheritance

    (1)编译器从上往下执行,所以在子类前面至少应该要有父类的声明;

    (2)OC中不允许子类和父类拥有相同名称的成员变量名;

    (3)OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果没有则一层一层的往上找;

    (4)super关键字,在子类中重写方法时,可以让调用者跳过这一层而调用父类中的方法。

    (5)OC语言是单继承语言。在OC语言中,基本上所有类的根类都是NSObject类。

    相关文章

      网友评论

          本文标题:@synthesize Category Extension I

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