黑马程序员技术交流社区

标题: @property关键字和@synthesize关键字 [打印本页]

作者: DummerKnight    时间: 2015-9-15 22:17
标题: @property关键字和@synthesize关键字
@property用法:
    1,@property是编译器的指令;
    2,@property的语法:
        @property int age;
        (这句话的意思,就是帮我们生成age 的get和set方法的声明)(xcode4.4以前)
        -(void)setAge:(int)age;
        -(int)age;

    3,@property只能写在@interface @end中。


    4,xcode4.4以后property做了增强 不但帮助我们自动生成get/set方法的声明还帮助我们自动生成get/set方法的实现 。


    5,告诉编译器,要生成的get/set方法声明的成员变量类型是int 。


    6,如果没有手动声明成员变量,perperty会在.m文件中自动帮我们生成一个开头的成员变量



(二),@synthesize用法:
    1. @synthesize age;
        1),生成一个age的私有实例变量;
        2),生成实例变量的get和set方法的实现

    2. @synthesize 给指定的实例变量赋值。
        @synthesize age = _age;

注意;
    如果是@synthesize的话, 变量名要先在.h文件中声明。
    @property,@synthesize这两个可以配合使用,用于简化set和get方法的定义和实现。


(三),xcode4.4之后
@property的增强用法:
    @property int age;这句话干了三件事:

    1,在.h文件中生成age的get和set方法的声明;
@interface Person : NSObject
-(void)setAge:(int)age;
            -(int)age;
        @end

    2,在.m文件中生成_age的私有实例变量;(前提是,没有在.h文件中手动声明_age变量)
        @implementation Person{
            int _age;//不能被子类继承
        }

        @end

    3,在.m文件中生成age的get和set方法的实现;
        @implementation Person{
            int _age;
        }
        -(void)setAge:(int)age{
            _age = age;
        }
        -(int)age{
            return _age;
        }
        @end


(四),在增强@property下,重写setter和getter方法:

    在使用@property情况下,可以重写getter和setter方法.需要注意的是,当把setter和getter方法都实现了之后,实例变量也需要手动去写.

作者: ZQG    时间: 2015-9-15 22:18
好好好,好久没见这么优秀的帖子
作者: ------    时间: 2015-9-15 22:26
这手打的太辛苦了
作者: TTsu    时间: 2015-9-15 23:09
杰哥真不容易,一个人要给三个人的号赚取技术分,还要唱三簧,我已经感动的留下了眼泪水
作者: 193936696    时间: 2015-9-15 23:38
学习了学习了
作者: 摆摆    时间: 2015-9-17 09:47
楼主辛苦了,共勉!
作者: wangganghua    时间: 2015-9-17 22:30
真是不错哦
作者: wlh0803    时间: 2015-9-18 18:49
学习了   
作者: chensc    时间: 2015-9-18 21:38
学习学习!
作者: fangshiqi    时间: 2015-9-18 22:08
赞一个。
作者: 摆摆    时间: 2015-9-19 09:59
感谢分享,学习了!
作者: zzx0826    时间: 2015-9-19 13:35
没什么好说的,一个字,好!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2