时显示物品诸如在的ViewController一个按钮,我声明它在头文件:
@property (nonatomic, strong) UIButton *startButton;
合成它在实现文件:
@synthesize startButton;
启动它在实现文件:
startButton = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
并设置viewDidUnload参考为零:
[self setStartButton:nil];
但是, 如果我有 viewDidLoad中这是在一个循环中动态创建的60个上市项目 (一个UIScrollView),(从核心数据馈送)? (不使用的TableView,因为项目是相当复杂和互动。)
我应该在任何地方首先声明的项目? 我应该将它们设置为nil地方? (或者我应该让我的手指交叉,祈求弧?)
一些指导,将不胜感激。 谢谢。
请问您的视图控制器具有指向每个这60项的属性或实例变量?
是的:接盘者的ivars或属性为零你-viewDidUnload
。
无:接下来有什么可担心的。
ARC改变你做什么来管理内存,但它并没有改变基本理念,这是每一个对象应该照顾自己的引用到其他对象,但不担心别人的。
在这种情况下,它包含了所有这些项目必须将项目强引用视图(通过它的子视图数组)。 当视图控制器释放其观点,这一观点随后将被释放并释放其过程中的所有子视图。 因此,所有这些项目将得到照顾。 如果你确实有对所有这些项目的强引用,这些引用将防止被引用的对象被释放 - 设置为无参考文献将被避免。
如果您是动态创建这些意见,并增加它们作为滚动视图的子视图,那么你不需要做任何事情。
当滚动视图中被释放-viewDidUnload
,它会妥善清理其所有子视图。
更新
它认为这种方式。 在上Storyboard的普通视图设置,你不需要有一个属性对每个视图,只有您的控制器与互动的意见。 这基本上是同样的事情。 你有一大堆的观点,即嵌入到上海华。 如果控制器不与他们进行互动,那么你就不需要担心。
没有。 :)
你肯定设置的所有指针 nil
,当你使用什么都没有必要再 ARC
。
在ARC
时,有没有更多的将释放当前对象的内存strong
指针谁试图保持活着的对象。 如果你不把它们设为nil
的ARC
认为你还在使用他们,他们会在记忆的时候,就会造成严重的内存泄露。
更新#1
如果您对按钮的任何引用,这是做到这一点的最简单的方法,你不需要做设置为nil
任何东西,因为他们的superview
班retain
他们,你应该只从他们的去除superview
。
for (UIView *_subView in self.view.subviews) {
if ([_subView isKindOfClass:[UIButton class]]) {
[_subView removeFromSuperview];
}
}
如果你存储其指针其他任何地方(在NSArray
为前)。你必须能够从他们删除指针为好。