@property

作者: cmhfx1 | 来源:发表于2017-06-12 15:15 被阅读0次

    @property是什么?

    @property是一个是编译器特性,在Xcode 4.4之前,编译器会自动生成setter和getter方法的声明。

    例如:作为方法声明,为别的文件调用,位置则在

    @interface

    @property NSInteger age;

    @end

    等价于

    @interface

    - (void)setAge:(NSInteger)age;

    - (NSInteger)age;

    @end

    生成的setter,getter方法声明,存在一定的格式


    存在方法声明自然对应着方法实现,因此,还存在另一个

    @synthesize 

    自动生成setter/getter方法的实现。例如:

    作为方法的实现,位置则在

    @implementation

    @synthesize name; //@synthesize age = age;

    @end

    左边是属性名,右边是实例变量。如果实例变量不存在,就会创建,但这是一个私有的成员变量, 是在.m文件中生成的, 不是在.h文件中生成的(extension)

    @interface Person ()

    {

    NSString *_name;

    }

    @end

    因此,无法在类外直接通过->_name访问

    如果我们实现了setter/getter方法的话,那么编译器便不会再生成相应的setter/getter的实现;如果我们setter和getter均实现,则编译器不但不会生成setter和getter方法的实现,也不会生成默认形式的实例变量,即使实例变量不存在。即@synthesize age = _age;  是无效的


    Xcode4.4之后,@property 进行了增强,@synthesize可以省略,默认写法 @synthesize age = _age;

    相关文章

      网友评论

          本文标题:@property

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