Ios 是否在启用圆弧的情况下将强引用对象设置为零?

Ios 是否在启用圆弧的情况下将强引用对象设置为零?,ios,xcode,automatic-ref-counting,weak-references,strong-references,Ios,Xcode,Automatic Ref Counting,Weak References,Strong References,我正在开发一个启用了ARC选项的iPhone应用程序。我正在.h文件中创建IBOutlets,这些文件从文件所有者图标连接到.xib元素 IBOutlet UIButton *bt; @property(nonatomic,retain)IBOutlet UIButton *bt; 在.m文件中,我正在做 @synthesize bt; 是否需要在viewDidUnload方法中将bt显式设置为nil?i、 e.self.bt=nil在viewDidUnload中 另外,是否需要在启用ARC

我正在开发一个启用了ARC选项的iPhone应用程序。我正在.h文件中创建IBOutlets,这些文件从文件所有者图标连接到.xib元素

IBOutlet UIButton *bt;
@property(nonatomic,retain)IBOutlet UIButton *bt;
在.m文件中,我正在做

@synthesize bt;
是否需要在
viewDidUnload
方法中将
bt
显式设置为nil?i、 e.
self.bt=nil
viewDidUnload


另外,是否需要在启用ARC选项的情况下编写
dealloc
方法?什么时候我应该在启用ARC的情况下将IBOutlets元素设置为强引用和弱引用?

viewDidUnload
dealloc

拥有ARC意味着您不需要在
dealloc
方法中写入它(它会自动完成),但是
viewDidUnload
方法还有另一个用途,它是为了在出现内存警告时释放应用程序不使用的内存。
dealloc
在某些情况下仍然是必需的,例如,当您的类注册了通知,或者您的类是其他人的委托,并且您不希望某个错误的回调给您带来访问权限


当您收到内存警告时,所有未显示的
UIViewControllers
将卸载其视图并调用该方法以释放内存。如果您仍然保留插座(如按钮、表格等),它们将不会被释放,从而终止ViewDiUnload方法的用途。

ViewDiUnload
dealloc
中,需要将插座设置为零是有区别的

拥有ARC意味着您不需要在
dealloc
方法中写入它(它会自动完成),但是
viewDidUnload
方法还有另一个用途,它是为了在出现内存警告时释放应用程序不使用的内存。
dealloc
在某些情况下仍然是必需的,例如,当您的类注册了通知,或者您的类是其他人的委托,并且您不希望某个错误的回调给您带来访问权限


当您收到内存警告时,所有未显示的
UIViewControllers
将卸载其视图并调用该方法以释放内存。如果您仍保留插座(如按钮、表格等),它们将不会被释放,从而终止ViewDiUnload方法的用途。

使用ARC时,例如,不需要使用
保留
复制
等修改器。这种内存管理是使用
strong
strong
修饰符自动完成的

您也不必担心编写
dealloc
方法

strong
相当于
retain
,因此您应该用它标记您的门店

@property(nonatomic, strong) IBOutlet UIButton *bt;
默认情况下,interface builder就是这样创建它们的

我不会详细介绍它们的语义差异,但如果您想知道发生了什么,并了解
strong
修饰符的具体情况,您应该真正了解一下

编辑: 抱歉,默认情况下,interface builder会创建
弱的
插座

编辑2:
strong
retain
确实是100%相同的。(感谢@Adam)

编辑3: 您可以将指针设置为
nil
,以避免收到任何发送到解除分配实例的
消息
BAD\u ACCESS\u EXCEPTION
错误

如果您实际使用的是ARC,则应使插座
(非原子,弱)
,而不是
(非原子,强)
。通过使用
归零指针,编译器所做的是在没有其他引用的情况下,自动将输出设置为
nil


因此,总而言之,如果不使用
弱属性,则应将指针设置为nil。

使用ARC时,例如,不需要使用
保留
复制
等修饰符。这种内存管理是使用
strong
strong
修饰符自动完成的

您也不必担心编写
dealloc
方法

strong
相当于
retain
,因此您应该用它标记您的门店

@property(nonatomic, strong) IBOutlet UIButton *bt;
默认情况下,interface builder就是这样创建它们的

我不会详细介绍它们的语义差异,但如果您想知道发生了什么,并了解
strong
修饰符的具体情况,您应该真正了解一下

编辑: 抱歉,默认情况下,interface builder会创建
弱的
插座

编辑2:
strong
retain
确实是100%相同的。(感谢@Adam)

编辑3: 您可以将指针设置为
nil
,以避免收到任何发送到解除分配实例的
消息
BAD\u ACCESS\u EXCEPTION
错误

如果您实际使用的是ARC,则应使插座
(非原子,弱)
,而不是
(非原子,强)
。通过使用
归零指针,编译器所做的是在没有其他引用的情况下,自动将输出设置为
nil


因此,总而言之,如果您不使用
弱属性,您应该将指针设置为nil。

“ViewDiUnload方法还有另一个目的,它是释放内存警告出现时应用程序不使用的内存”No。为此,我们提供了didReceiveMemoryWarning。它们都会在内存警告时被调用,不过将输出设置为零的正确位置是在viewDidUnload中。。。当您创建一个新的UIViewController子类时,它甚至会在方法中被注意到!!“他认为这是一个很好的方法