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

kku*_*rni 93 iphone objective-c ios automatic-ref-counting

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

@property(retain, [weak/strong]) __attribute__((NSObject)) CFDictionaryRef myDictionary;
Run Code Online (Sandbox Code Playgroud)

有什么影响和好处?

我听说iOS 4上没有弱点,我们需要使用assign.

弱者类似于分配吗?

swi*_*Boy 119

以下是我对变量属性的了解

  1. 原子//默认
  2. 非原子
  3. strong =保留//默认
  4. 保留
  5. 分配//默认
  6. unsafe_unretained
  7. 复制
  8. 只读
  9. readwrite //默认

以下是详细的文章链接,您可以在其中找到上述所有属性,这些属性将极力帮助您.非常感谢所有在这里给出最佳答案的人!

iOS中的变量属性属性或修饰符

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

例:

@property (strong, nonatomic) ViewController *viewController;

@synthesize viewController;
Run Code Online (Sandbox Code Playgroud)

02. 弱(iOS4 = unsafe_unretained) - 它表示"只要其他人强烈指向它就保持这一点" - 与分配相同,不保留或释放 - "弱"引用是您不保留的引用. - 我们通常对IBOutlets使用弱(UIViewController的Childs).这是有效的,因为只要父对象存在,子对象才需要存在. - 弱引用是一种引用,它不保护引用的对象不被垃圾收集器收集. - 弱基本上是分配,一个没有保留的财产.除了取消分配对象时,弱指针自动设置为nil

示例:

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

@synthesize myButton;
Run Code Online (Sandbox Code Playgroud)

解释:感谢BJ荷马

想象一下,我们的对象是一只狗,狗想要逃跑(被解除分配).强壮的指针就像是狗的皮带.只要你的皮带附着在狗身上,狗就不会逃跑.如果五个人将他们的皮带连接到一只狗,(五个强指针指向一个物体),那么在所有五个皮带脱落之前,狗不会逃跑.另一方面,弱点就像小孩子指着那只狗说"看!一只狗!" 只要狗仍然在皮带上,小孩子仍然可以看到狗,他们仍然会指向它.然而,一旦所有的皮带脱落,无论有多少小孩指着它,狗都会跑开.一旦最后一个强指针(皮带)不再指向一个对象,该对象将被释放,并且所有弱指针都将被清零.当我们使用弱者?你想要使用弱的唯一一次是,如果你想避免保留周期(例如父母保留孩子而孩子保留父母,所以两者都没有被释放).

  • 在皮带比较中享受狗.解释得很好. (27认同)

Rob*_*ert 102

您可以为特定文件启用或禁用ARC.如果它上面你不能使用retain release autorelease等...而是strong weak用于属性或__strong __weak 变量(默认为__strong).Strong相当于保留,但ARC将为您管理发布.

你想要使用弱的唯一一次是,如果你想避免保留周期(例如父母保留孩子而孩子保留父母,所以两者都没有被释放).

"免费桥接"部分(从中投射NSCF)有点棘手.您仍然需要手动管理CFRelease()CFRetain()对CF的对象.当你将它们转换回NS对象时,你必须告诉编译器有关保留计数的信息,以便它知道你做了什么.

一切都在这里.