代码之家  ›  专栏  ›  技术社区  ›  tom19830924

具有属性的自定义或重写访问器

  •  0
  • tom19830924  · 技术社区  · 10 年前

    两个类似的问题

    问题1:我有一个名为mySetter的自定义setter:stockName是否仍然持有强指针?

    @property (nonatomic, strong, setter = mySetter:) NSString *stockName;
    - (void)mySetter:(NSString *)name {
        _stockName = name;
    }
    

    问题2:我覆盖了默认的setter,stockName是否仍然持有强指针?

    @property (nonatomic, strong) NSString *stockName;
    - (void)setStockName:(NSString *)stockName {
        _stockName = stockName;
    }
    

    谢谢回复

    3 回复  |  直到 10 年前
        1
  •  0
  •   Martin R    10 年前

    从…起 Encapsulating Data 在“使用Objective-C编程”中:

    笔记 :编译器将自动合成实例变量 在所有情况下,它也会合成至少一个访问者 方法如果同时为readwrite实现getter和setter 属性,或只读属性的getter,编译器将 假设您正在控制属性实现 并且不会自动合成实例变量。

    由于您没有实现 吸气剂,吸气剂 ,实例变量 _stockName 合成。 为此,如果为setter使用默认名称或自定义名称,则无关紧要。

    将属性声明为“强”意味着 __strong 所有权 关联的实例变量,请参见 "4.1.1. Property declarations" 在“Clang/ARC”文档中。

        2
  •  0
  •   Anil Varghese    10 年前

    如果您正在使用 ARC 你指定了 strong 访问说明符,属性将包含强引用。ARC将执行保留/释放。在下面 non arc 重写访问器方法不是这样的。你应该处理 retain/release 通过 setter = mySetter: 您只需为访问器方法分配别名。这不会对实施产生任何影响。两种方法都在做相同的事情。还有一件事 mySetter: 不会成为 stockName 会是的 setStockName

        3
  •  0
  •   Himanshu Joshi    10 年前

    stockName 将保持 strong 当您提供 property 具有 坚强的 所有权所以在这两种情况下 坚强的 指针引用。

    但对于你提出的问题,你可以使用 股票名称 作为 iVar , setter 方法和 getter 方法为

    问题1

    iVar公司 = 股票名称

    吸气剂,吸气剂 = [self stockName] self.stockName

    安装工,安装工 = [self mySetter:]

    问题2

    iVar公司 = 股票名称

    吸气剂,吸气剂 = [自身股票名称] self.stockName

    安装工,安装工 = self.stockName = [self setStockName:]