Objective-C ARC 和实例变量 iOS SDK

标签 objective-c ios

我们是否应该将我们希望保留的所有实例变量转换为私有(private)属性,还是我遗漏了一些明显的东西?

@interface SomethingElse : Something  {

    NSMutableArray *someArray;

}

在此示例中,someArray 在使用 [NSMutableArray initWithObject:someObject] 的方法中初始化但未保留。

我的特殊情况是我正在更新游戏,有很多实例变量,所以为了 sdk 的 future 版本,我想确保我做的是正确的。

最佳答案

Are we supposed to convert all of the local variables we wish to retain to private properties or am I missing something obvious?

首先,您在示例中显示的变量是实例变量,而不是局部变量。局部变量在代码块内声明(例如,在函数或方法内,或在某些子 block 内,例如条件语句的主体),并且其生命周期仅限于声明它们的 block 的执行.实例变量在类中声明;该类的每个 实例 都有自己的该类声明的实例变量的副本。

其次,不,您不需要将所有实例变量都转换为属性。 Instance variables are treated as strong references by default under ARC.属性实际上只是一个 promise ,即类提供具有特定语义的特定访问器。仅仅拥有一个实例变量并不意味着您必须为该 ivar 提供访问器。 (有些人可能会说您应该,但您不必这样做。)

关于Objective-C ARC 和实例变量 iOS SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314775/

相关文章:

iOS 9 导航栏平铺背景

ios - 扩展 SDWebImage 缓存大小

objective-c - 带CoreText的多页PDF

ios - 如何在 UI 中快速显示 JSON

objective-c - 为什么 EXC_BAD_ACCESS 如此无用?

ios - XCDYouTubeVideoPlayer 打开和关闭

ios - iOS 中另一个请求中的 HTTP 请求

ios - 如何将文本转换为 UIImage(使用 GPU)

ios - 如何将自定义字体应用于 TTTAttributedLabel

ios - 无法在 NSURLSession 委托(delegate)方法中更新用户界面