• 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


  • 相关阅读:
    js菜单特效分享(1)
    用泛型的IEqualityComparer接口去重复项 .
    jquery一些有用的插件
    JQuery Tree插件——zTree v3.0 beta 发布
    泛型和linq
    js如何隐藏表格的行与列
    34个漂亮的应用程序后台管理界面
    解决Visual Studio setup cannot run in compatibility mode的错误
    html文本框(input)不保存缓存记录
    第九章:第九章:XML文档集成Axd向导
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3262921.html
Copyright © 2020-2023  润新知