iphone - Objective-C 中的弱属性和强属性 setter 属性

Objective-C 中的弱属性 setter 属性和强属性 setter 属性有什么区别?

@property(retain, [weak/strong]) __attribute__((NSObject)) CFDictionaryRef myDictionary;

有什么影响和好处?

听说weak在iOS 4上不可用,我们需要使用assign。

weak类似于assign吗?

最佳答案

这是我对变量属性的了解

  1. 原子的//默认
  2. 非原子
  3. strong=retain//默认
  4. 保留
  5. 赋值//默认
  6. unsafe_unretained
  7. 复制
  8. 只读
  9. 读写//默认

所以下面是详细的文章链接,您可以在其中找到上述所有属性,这肯定会对您有所帮助。 非常感谢所有在这里给出最佳答案的人!

Variable property attributes or Modifiers in iOS

01.strong(iOS4 = 保留) - 它说“把它放在堆里,直到我不再指向它” - 换句话说“我是所有者,你不能在瞄准与保留相同的目标之前解除分配” - 只有在需要保留对象时才使用strong。 - 默认情况下,所有实例变量和局部变量都是强指针。 - 我们通常对 UIViewControllers(UI 项的父项)使用 strong - strong 与 ARC 一起使用,它基本上可以帮助您,不必担心对象的保留计数。完成后,ARC 会自动为您释放它。使用关键字 strong 意味着您拥有该对象。

例子:

@property (strong, nonatomic) ViewController *viewController;

@synthesize viewController;

02.弱(iOS4 = unsafe_unretained) - 它说“只要其他人强烈指出它,就保持这个” - 与分配相同,没有保留或释放 - “弱”引用是您不保留的引用。 - 我们通常对 IBOutlets(UIViewController 的 Childs)使用weak。这是因为只有子对象 只要父对象存在就需要存在。 - 弱引用是不保护被引用对象不被垃圾收集器收集的引用。 - 弱本质上是分配,一个未保留的属性。除了对象被释放时,弱指针自动设置为 nil

例子:

@property (weak, nonatomic) IBOutlet UIButton *myButton;

@synthesize myButton;

解释:Thanks to BJ Homer

想象我们的对象是一只狗,而狗想逃跑(被释放)。 强指针就像狗的皮带。只要你把皮带拴在狗身上,狗就不会逃跑。如果五个人将他们的皮带拴在一只狗身上(五个强指针指向一个物体),那么在所有五根皮带都脱离之前,狗不会逃跑。 另一方面,弱指针就像 child 子指着狗说“看!一条狗!”只要狗还在皮带上, child 子仍然可以看到狗,他们仍然会指向它。然而,一旦所有的皮带都松开了,不管有多少 child 指着它,狗都会跑掉。 一旦最后一个强指针(leash)不再指向一个对象,这个对象就会被释放,所有的弱指针都会被清零。 当我们使用弱? 你唯一想使用弱的时候,是如果你想避免保留循环 (例如, parent 保留 child , child 保留 parent ,因此两者都不会被释放)。

https://stackoverflow.com/questions/7912555/

相关文章:

objective-c - 循环遍历 NSMutableDictionary

ios - 文档 Main.storyboard 需要 Xcode 8.0 或更高版本

iphone - 向下移动 UITabBarItem 图像?

ios - 如何检查 UILabel 是否被截断?

objective-c - 如何在基于 block 的 API 方法中使用非空和可为空的 Objec

objective-c - Xcode 版本 (CFBundleShortVersionString

objective-c - presentViewController : crash on iOS

objective-c - NSString:isEqual 与 isEqualToString

objective-c - 如何将 NSInteger 转换为 int?

objective-c - 如何在 NSString 中找到最后一次出现的子字符串?