• OC学习那些事:@property和@synthesize


    1.@property 

    只用在.h文件中@interface关键字中 

    当编译器遇见@property时,会自动展开成getter和setter方法的声明 

     

    //等效 
    @property int age; 
     
    -(int)age; 
    -(void)setAge:(int)newAge; 

    注意:在XCode4.5环境下,检测到@property时,自动在.m文件中添加@synthesize age = _age。如.h文件,没有声明_age变量,则自动在.m文件中添加私有的成员变量_age 

    2.@synthesize 

    只用在.m文件中的@implements关键字 

    当编译器遇见@synthesize时,会自动展开成getter和setter方法的实现,默认访问同名的成员变量 

    @synthesize age = _age;代表get方法和set方法会访问_age这个成员变量 

     

    //等效 
    @synthesize age = _age; 
     
    -(void)setAge:(int)newAge 
    { 
        _age = newAge; 
    } 
     
    -(int)age 
    { 
        return _age; 
    }  

    注意:如果没有找到成员变量,自动生成私有同名成员变量 

    3.完整的使用 

    Person.h文件 

     

    @interface Person:NSObject 
    { 
        int _ID; 
        float _weight; 
    } 
    @property int ID; 
    @property float weight; 
     
    @end 

    Person.m文件 

     

    @implement Person 
     
    @synthesize ID = _ID; 
    @synthesize weight = _weight; 
     
    @end 

    4.综合使用 

    以上@property和@synthesize关键字和getter/setter方法可以混合使用 

    如果在某种特殊的需求下,手动实现了getter/setter方法时,则@synthesize无效 

    Person.h文件 

     

    @interface Person:NSObject 
    { 
        int _ID; 
        float _weight; 
    } 
    @property int ID; 
    @property float weight; 
     
    @end 

    Person.m文件 

     

    @implement Person 
     
    -(void)setID:int newID 
    { 
        //在getter/setter方法中,有特殊的操作 
        _ID = newID *100; 
    } 
     
        -(int)ID 
    { 
        return _ID; 
    } 
    @end


  • 相关阅读:
    thinkPHP框架学习笔记
    ajax的项目实操(只用于记录部分文件未引入)
    js中两个感叹号的原理与用法分析(转载记录没找到原帖)
    html5+css3学习笔记-prefixfree前缀补全插件
    背景图动起来就这么简单!
    flash设计师罢工,小前端顶上
    onbeforeunload与a标签在IE中的冲突bug(转载)
    js自定义的简易滚动条
    2020牛客国庆集训派对day2
    马拉车算法 Manacher
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3262921.html
Copyright © 2020-2023  润新知