zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    DOM操作创建表格
    基于insertBefore函数编写insertAfter函数
    兼容浏览器将NodeList对象转换为数组
    创建对象
    对象属性
    常用命令
    play framework
    Intellij Idea 15 注册方法
    eclipse 背景色调整,设置成护眼色(豆沙绿)
    查看Eclipse版本号,及各个版本区别
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3262921.html
Copyright © 2011-2022 走看看