在阅读了这么多文章 Stackoverflow 帖子和演示应用程序来检查可变属性属性后,我决定将所有属性信息放在一起:
- 原子//默认
- 非原子的
- 强=保留//默认
- weak
- retain
- 分配//默认值
- __unsafe_unretained
- copy
- readonly
- 读写 //默认
下面是详细的文章链接,您可以在其中找到上述所有属性,这肯定会对您有所帮助。
非常感谢所有在这里给出最佳答案的人!
iOS 中的可变属性属性或修饰符 http://rdcworld-iphone.blogspot.in/2012/12/variable-property-attributes-or.html
1.strong(iOS4=保留)
- 它说“将其保留在堆中,直到我不再指向它”
- 换句话说,“我是所有者,你不能在与保留相同的目标之前释放它”
- 仅当需要保留对象时才使用强。
- 默认情况下,所有实例变量和局部变量都是强指针。
- 我们通常对 UIViewControllers(UI 项的父级)使用 Strong
- Strong 与 ARC 一起使用,它基本上可以帮助您,因为不必担心对象的保留计数。当你使用完它后,ARC会自动为你释放它。使用关键字strong意味着你拥有该对象。
Example:
@property (strong, nonatomic) ViewController *viewController;
@synthesize viewController;
2.weak
-
- 它说“只要其他人强烈指出它,就保留它”
- 与分配相同,没有保留或释放
- “弱”引用是您不保留的引用。
- 我们通常对IBOutlets(UIViewController Child's)使用weak。这是有效的,因为只要父对象存在,子对象就需要存在。
- 弱引用是不能保护引用对象不被垃圾收集器收集的引用。
- 弱本质上是分配,一个未保留的属性。除了当对象被释放时,弱指针会自动设置为 nil
例子 :
@property (weak, nonatomic) IBOutlet UIButton *myButton;
@synthesize myButton;
强弱解释,感谢 BJ 荷马 https://stackoverflow.com/a/9262768/19679:
想象我们的对象是一只狗,而狗想要逃跑(是
解除分配)。
强指针就像是狗身上的皮带。只要你有
给狗拴上皮带,狗就不会逃跑。如果五个人
将皮带拴在一只狗身上(五个强指针指向一个物体),
然后,在五个皮带全部松开之前,狗不会逃跑。
另一方面,弱指针就像小孩子指着
狗并说“看!一只狗!”只要狗还在
拴着皮带,小孩子们仍然可以看到狗,他们仍然会指着
到它。然而,一旦所有的皮带都被松开,狗就会逃跑
无论有多少小孩子指着它,它都会消失。
一旦最后一个强指针(皮带)不再指向
对象,该对象将被释放,所有弱指针将被释放
归零。
我们什么时候用弱呢?
唯一需要使用weak的时候是如果你想避免引用循环
(例如,父级保留子级,子级保留父级,因此两者都不会被释放)。
3.保留=强大
- 它被保留,旧值被释放并被分配保留指定应发送新值
- 保留分配和发送的旧值 -release
- 保留与坚强相同。
- 苹果说,如果你写保留,它会自动转换/仅像强一样工作。
- 像“alloc”这样的方法包含隐式的“retain”
Example:
@property (nonatomic, retain) NSString *name;
@synthesize name;
4.assign
- 分配是默认值,仅执行变量分配
- allocate 是一个属性属性,它告诉编译器如何综合属性的 setter 实现
- 我将使用 allocate 来表示 C 基元属性,使用weak 来表示对 Objective-C 对象的弱引用。
Example:
@property (nonatomic, assign) NSString *address;
@synthesize address;