• 属性


    摘自:

    《Effcitive Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》

    第6条:理解“属性”这一概念

    // 属性

    @property (nonatomic, strong, readwrite) NSNumber *cumulativeInterest;

    等价于

    // 合成方法:用于指定属性对应的实例变量的名字,通常用属性名前面加下划线作为实例变量名

    // 如果重写存取方法,那同时也需要重写合成方法,否则存取方法不知道实例变量的名字,就会提示找不到 _cumulativeInterest 变量

    @synthesize cumulativeInterest = _cumulativeInterest;

    // gerter 取方法

    - (NSNumber *)cumulativeInterest {

        return _cumulativeInterest;

    // setter 存方法

    - (void)setCumulativeInterest:(NSNumber *)cumulativeInterest {

        _cumulativeInterest = cumulativeInterest;

    }

    strong:强属性,“拥有关系”,强表示保持对这个的存储,Objective-C会追踪每一个指向堆中对象的强指针,只要有一个强指针存在,就会把其留在堆中;一旦无强指针指向此对象,会立即释放内存;

      这种内存管理方法称作引用计数(Reference Counting),有别于垃圾收集(Garbage Collector)

    weak:弱属性,“非拥有关系”,弱指针表示有一个指针指向堆中的这个对象,只要还有强指针指向它,就将其留在堆中;一旦无强指针指向此对象,内存就会释放,同时这个弱指针,会被设为nil;

    assign:常用于CGFloat、NSInteger等纯量类型(scalar type)

    copy:类似strong ,“拥有关系”,常用于NSString等类型

    建议:

    在读取实例变量时,采用直接方法的方式(取:实例变量)

    在设置实例变量时,采用属性的方式(存:属性)

    特例:当用“惰性初始化”(lazy initialization)时,需要用属性来访问,否则实例变量永远不会初始化

  • 相关阅读:
    UVa 11384 Help is needed for Dexter (递归)
    HDU 4355 Party All the Time (三分求极值)
    UVa 11992 Fast Matrix Operations (线段树,区间修改)
    LA 3708 && POJ 3154 Graveyard (思维)
    LA 3942 && UVa 1401 Remember the Word (Trie + DP)
    LA 4329 Ping pong (树状数组)
    HDU 2058 The sum problem (数学+暴力)
    POJ 1458 Common Subsequence (DP+LCS,最长公共子序列)
    代理服务器
    .net垃圾回收
  • 原文地址:https://www.cnblogs.com/mobilefeng/p/4772258.html
Copyright © 2020-2023  润新知