ios - 接口(interface) Object() {} 和 @implementation Object @end 中的变量之间的区别

标签 ios objective-c

我从 Objective-C 开始我的冒险和 iOS而且我有一件事我不知道如何正确使用,这简直让我大吃一惊。

许多教程在 .m 中有私有(private)类变量。文件定义如下:

@interface ViewController (){
    @property (nonatomic, strong) NSMutableArray *myArray;
}

或像这样:
@implementation ViewController
        NSMutableArray *myArray;
@end

在第一个示例中,我可以使用 _myArray而不是 self.myArray ,我喜欢,但我应该把我所有的私有(private)变量放在接口(interface)文件中吗?这两个变量有什么区别?我什么时候应该使用一个而不是另一个,哪个更安全?

最佳答案

不同之处在于:

  • _myArray是实例变量。
  • self.myArray在您的对象上调用 getter 方法。
  • 使用 self.myArray = nil使变量通过其 setter ,因此当 ARC 为 时释放对象不是 用过的)。
  • 如果属性声明为 atomic (默认值),这意味着访问变量是线程安全的,性能成本
  • nonatomic property 意味着当从多个线程访问变量或属性时可能会发生竞争条件。

  • 一般来说,使用 atomic用于与多个线程共享的对象和 nonatomic对于 UI 或非共享对象。

    关于ios - 接口(interface) Object() {} 和 @implementation Object @end 中的变量之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25054336/

    相关文章:

    ios - TableviewController 委托(delegate)不返回值

    ios - 如何列出iPhone的pdf文件?

    ios - 如何将 IBOutlet 连接到类类别的 Storyboard

    ios - AES256Encryption 在 64 位设备上返回数据 nil

    ios - 在 iOS 8 中每次启动时记录或缓存路径更改

    ios - UITableView 意外发现 Nil 不一致发生

    UIWebView 中的 Javascript 回调到 C/Objective-C

    iphone - 将 Xcode 项目导入到另一个项目中,而不使用源代码树

    ios - 收到推送通知时打开特定选项卡并在 uiwebview 中启动特定网址

    ios - 弹出 ViewController 时停止执行 GCD