美文网首页
@synthesize作用

@synthesize作用

作者: 希罒 | 来源:发表于2019-08-15 11:22 被阅读0次

    属性合成器( auto synthesis),这个过程由编译器在编译期执行,它会生成get/set方法和带下划线的私有变量

    @interface CYLPerson : NSObject 
    @property NSString *name; 
    @end
    

    在上例中,会自动生成_name的实例变量。也可以在类的实现代码里面通过 @synthesize关键字来指定实例变量的名字:

    @implementation CYLPerson 
    @synthesize name = _myName; 
    @end
    



    @systhesize合成实例变量规则,有以下几点:

    • 如果指定了成员变量的名称,会生成一个指定的名称的成员变量,
    • 如果这个成员已经存在了就不再生成了.
    • 如果是 @synthesize foo; 还会生成一个名称为foo的成员变量,也就是说:如果没有指定成员变量的名称会自动生成一个属性同名的成员变量
    • 假如 property 名为 object,存在一个名为 _object 的实例变量,则不会自动合成新变量
    • 不能在分类中使用
    sythesis.png

    以下几种情况是不会autosynthesis(自动合成):

    1. 同时重写了 setter 和 getter 时
    2. 重写了只读属性的 getter 时
    3. 使用了 @dynamic 时
    4. 在 @protocol 中定义的所有属性
    5. 在 category 中定义的所有属性
    6. 重载的属性

    以上情况,如果想访问实例变量会报错:“Use of undeclared identifier '_foo'”, 你只能手动合成ivar:@synthesize foo = _foo;

    相关文章

      网友评论

          本文标题:@synthesize作用

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