• 在两个方面(即使用ARC或不使用ARC)中,在viewDidUnload中将属性设置为nil什么意义?
  • 仅在IBOulets情况下才重要吗? 我们是否不需要将其他属性(不是IBOulets )设置为nil
  • 如果我不这样做会带来什么后果? 我没有将它们设置nil ,也没有观察到任何后果。

非常感谢您的帮助。

#1楼 票数:1

在viewDidUnload中将IBOutlets设置为nil会告诉编译器释放内存警告出口。因为在发生内存警告..viewDidUnload和didReceiveMemoryWarning时会调用viewcontrollers。通常,在ViewDidUnload中,IBOutlets设置为nil,在didReceiveMemoryWarning属性或对象中释放因此,在这种情况下,内存会重新获得,因此您的应用程序可以继续运行,否则由于内存不足而导致连续池崩溃

#2楼 票数:0

在网上阅读了很多文章并在stackoverflow.com上经历了类似的问题之后,我达到了以下理解:

  • 在内存不足的情况下,编译器将调用viewDidUnload

  • 我们应该在方法中将那些属性设置为nil,这些属性将在viewDidLoad重新实例化。 几乎所有IBOutlet组件都属于该类别。 因此,更好的方法是将IBOutlets声明为nil。 否则将导致连续池化,并且可能由于将来内存不足(应用继续运行的时间)而导致崩溃。

  • 我还读到我们不应该像NSString这样的类的实例设置零(可能导致崩溃),根据我的经验,这是正确的。 但原因我不知道。

  • 它与ARC无关。 将属性设置为nil仅仅意味着该属性不再保留任何存储位置的引用。

每当我对它有更多了解时,我都会继续更新此答案。

谢谢。

  ask by Harshit Gupta translate from so

未解决问题?本站智能推荐:

4回复

将合成(保留)属性设置为nil时的EXC_BAD_ACCESS

调用这行代码时,我得到一个错误的访问(objc_msgsend): 其中“currentGameTeam”在接口中为名为“MCState”的类定义为: 我为它合成了一个属性: 设置NSZombieEnabled后,控制台显示: 调试器跟踪显示它来自合成的setter代码: 我
2回复

iPhone属性设置为零

我用以下声明设置了一个属性: 到具有1个键-val对的字典。 然后,我视图中的表视图将字典的一个值罚款作为节标题。 但是,当我再次访问该值时,它为零。 有什么建议么? 我已经做了一个小时的工作,并整理了文档,现在可以继续编码了。
1回复

iPhone-将nil设置为IBOutlet时为EXC_BAD_ACCESS-内存管理

我面临一个令人讨厌的问题,我找不到原因。 我有一个以模态形式呈现的UIViewController: 然后,当我关闭这样的视图控制器时: 该dealloc被称为: 一旦视图控制器被关闭,我就会通过iPhone Simulator菜单发送内存警告,并且viewdidunload方法
2回复

为什么动画自定义CALayer属性会导致其他属性在动画期间为零?

我有一个自定义CALayer(比如CircleLayer),包含自定义属性(半径和色调)。 该图层在其drawInContext:方法中呈现自身。 我希望半径可以动画,所以我已经实现了 动画的执行方式如下: drawInContext:在动画期间按预期调用以重绘圆圈,但是一旦动画开
3回复

在Objective-c中向NIL发送发布

有人可以在Mac电脑上然后在iphone设备上向我解释该程序的输出。 我创建了一个琐碎的Foo类,其中不包含Foo.h: 和Foo.m: 要在Mac上进行测试,请使用main.m: 该程序输出: 但是在iPhone上,它直接崩溃了。 谢谢。
2回复

Objective-C属性设置器信号如何失败?

假设您有一个具有复制语义的属性。 如果复制方法失败,你应该在setter中做什么? (我认为这是一种可能性,因为副本通常以alloc / init组合开始,它可能会失败并返回nil。)Apple建议返回错误代码而不是使用异常,但是setter通常具有void返回类型。 推荐的方法是什么?
3回复

当我使用访问器方法设置对象的属性时,到底发生了什么?

假设我有一个名为MyClass的对象,该对象的属性定义为@property (nonatomic, retain) NSString *foo; 然后我合成了该属性。 然后在另一个类中,说应用程序代表我定义了一个字符串(但是可以是任何东西) NSString *myString = [[N
2回复

IBOutlet关于类的属性和说明

对于内存管理问题,Apple建议在属性上而不是在属性声明中定义出口。 但是,据我所知,声明属性会将类暴露给外部类,因此这可能很危险。 在UIViewController上,我们具有主视图定义和逻辑,因此在这种情况下MVC稍有被骗 。 苹果公司对内存管理或铠装类的推荐方法是什么?