• 理解“属性”


    属性是objective-C的属性。保存数据的实列变量,一般通过getter 和setter进行取值和赋值在在c++中我们通常这样定义一个类

    @interface Student : NSObject {
        @public
        NSString *_name;
        @private
        NSInteger _age;
    }
    
    @end

    这样的写法name age 在对象编译的时候布局就已经规定了。简单的说就是编译的时候编译器会把变量编程存放对象内存的编译量,比方说一个Student的对象A。name 处于对象的開始位置,编译的时候凡是A->_name的地方替换成A+0,而age被换成A+4,偏移量依据变量在内存的位置决定的。那假设我如今新增了一个属性,在_name 之前全部的偏移量都会变化。须要又一次编译。

    objective-c会把上述偏移量交与类对象管理,它会在执行期查找。因此在执行期向类中加入实例变量。

    objective-c 提供了@property 属性。为了程序猿更好的使用,它能够自己主动帮我门生成setter与getter方法,这时候点语法就派上了用场。这些我门我能够理解为编译器特性

    如今的版本号@property 会自己主动补全属性没有的方法。

    @synthesize 能够制定生成变量的名字。假设没有会自己主动生成下划线的变量,
    @property 另一下特性
    原子性
    读写权限控制
    readonly/readwrite
    内存管理语句
    assign 赋值操作
    strong 拥有。保存新的值释放旧的值
    weak非拥有,既不释放旧的值。也不保留新的值,当他指的对象销毁是属性会被清空
    copy与strong 相似,保留新的值时。并不保留,而是对新的值进行copy。

    getter=<>
    setter=<>指定方法名字

    直接訪问变量的时候,要遵从变量声明的声明语义。意思是比方声明了一个copy属性的变量,直接訪问变量本身的时候也要进行copy操作。

  • 相关阅读:
    P4297 [NOI2006]网络收费
    P4207 [NOI2005]月下柠檬树
    bzoj2517 矩形覆盖
    bzoj2506 calc
    ......
    SP1811 LCS
    CF585E Present for Vitalik the Philatelist
    好康的
    CF605E Intergalaxy Trips
    字符串
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7396420.html
Copyright © 2020-2023  润新知