zoukankan      html  css  js  c++  java
  • objective-c在Xcode中@property相关参数的解释

    objective-c在其对象拥有成员变量时,我们为了保持代码的封装,会将成员变量设置为@protected,并为成员变量编写setter和getter方法。

    如:

    @interface Person : NSObject
    {
        @protected
        int _age;
    }
    - (int)get;
    - (void)setAge:(int)age;
    @end
    
    @implementation Person
    - (int)get
    {
        return _age;
    }
    - (void)setAge:(int)age
    {
        _age = age;
    }
    @end

    在Xcode中,为了让我们摆脱这种枯燥的格式化代码,增加了@property属性设置,使用@property属性,编译器会自动帮我们实现这些代码,

    如:

    @interface Person : NSObject
    @property int age;
    @end
    
    @implementation Person
    @end

    这段代码经过编译器编译后与上面的代码完全相同。

    但是,在实际应用中,内存管理,多线程,成员变量是否只读等等需求很多,所以@property为我们提供了很多参数来实现这些不同的需求,如下:

    1.内存管理相关:

    *retain:release旧值,retain新值(适用于对象类型的成员变量)

    *assign:直接赋值(默认参数,适用于基本数据类型的成员变量)

    *copy: release旧值,copy新值

    注:关于内存管理,请阅读http://www.cnblogs.com/yoran-yang/p/4293546.html

    以retain为例:

    @interface Person : NSObject
    @property (retain) Book *book;
    @end

    等同于:

    @interface Person : NSObject
    {
        @protected
        Book *_book;
    }
    - (Book *)get;
    - (void)setBook:(Book *)book;
    @end
    
    @implementation Person
    - (Book *)get
    {
        return _book;
    }
    - (void)setBook:(Book *)book
    {
        if(book != _book)
        {
            [book release];
            _book = [book retain];
        }
    }
    @end

    2.读写控制相关

    *readwrite:同时生成getter与setter的声明和实现(默认参数)

    *readonly:只生成getter方法

    3.多线程相关

    *nonatomic:禁止多线程,变量保护,提高性能,读写成员变量的操作效率可以提高数倍(强烈建议在非多线程环境的程序加上此参数)

    *atomic:线程安全的,性能低(默认参数为线程安全的,即加线程锁)

    4.setter和getter方法的名称

    *getter =(getter的方法名)

    *setter =(setter的方法名)注意:此方法名必须加上后面的“:”。

  • 相关阅读:
    CSS------制作一个带+-的input框
    rest简介
    flask之flask-login登陆验证(一)
    Python之异常设计(一)
    flask之flask-sqlalchemy(一)
    flask之wtforms 表单验证(一)
    三 Django模型层之Meta
    二 Djano模型层之模型字段选项
    一 Django模型层简介
    Django之路由、模板和模型系统 (转载)
  • 原文地址:https://www.cnblogs.com/yoran-yang/p/4293612.html
Copyright © 2011-2022 走看看