Ios 是否在启用圆弧的情况下将强引用对象设置为零?
我正在开发一个启用了ARC选项的iPhone应用程序。我正在.h文件中创建IBOutlets,这些文件从文件所有者图标连接到.xib元素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
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子类时,它甚至会在方法中被注意到!!“他认为这是一个很好的方法