iOS 属性声明说明

标签 ios class properties

这是一个由两部分组成的问题,希望我能理解更多关于该主题的信息。

1) 在我看来,您有两个流行选项来为objective c< 中的声明属性。一种是将属性添加到 header 的类主体中,例如。

@interface MyClass : NSObject {
    NSArray *myArray;
}

或者您可以将它添加到@interface 主体之后和@end 语句之前像这样

@interface MyClass : NSObject {
    //
}

@property (nonatomic, retain) NSArray *myArray;

这两种“风格”之间有什么区别?您什么时候选择其中一种?

2) 在 @property 之后,您可以找到诸如 (nonatomic, retain) 之类的选项。这些选项的用途是什么?为什么/何时您使用不同的选项?

最佳答案

以下是 Xcode 识别的唯一属性修饰符:

  • nonatomic(不对属性强制执行线程安全,主要用于在整个程序中只使用一个线程的情况)
  • atomic(对属性强制执行线程安全,主要用于在整个程序中使用多个线程的情况)(默认)
  • retain/strong(自动保留/释放集合上的值,确保值不会意外释放)(如果是 ARC 和对象类型则默认)
  • 只读(无法设置属性)
  • readwrite(可以设置和获取属性)(默认)
  • assign/unsafe_unretained(没有内存管理应该用这个属性完成,它由赋值的人手动处理)(如果不是ARC或对象类型则默认)
  • copy(在设置对象之前复制对象,以防由于外部因素(字符串、数组等)而设置的值不能更改。
  • weak(如果对象被释放,自动清零引用,并且不保留传入的值)
  • getter=method(设置用于获取此属性值的选择器)
  • setter= method(设置用于设置该属性值的选择器)

关于iOS 属性声明说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9162926/

相关文章:

ios - Xcode 8's simulator won' t 工作

ios - dismissViewControllerAnimated 自定义动画

ruby - 在初始化方法中自定义 ArgumentError 消息

C++14 operator << 用于流插入和枚举类

c# - 在 C# 中使用可访问性修饰符继承属性

javascript - 如何使用 `defineProperty` 创建只读数组属性?

ios - 获取 iPhone 旋转和方向以实时旋转 3D 对象

ios - 使用 CloudKit 和 Swift 一次保存多个 CKRecords

C++ - 我们如何在不调用其属性的情况下调用类?

objective-c - Objective-C : Releasing int/float properties