我在 Xcode (Allocations) 中使用分析工具发现的是,当您取消一个属性时,它不会被释放,直到父类被取消。现在假设您要确保不在内存中保留昂贵的模态视图控制器(假设它不会经常使用),如果昂贵的 VC 是一个属性,则为该属性分配的内存不会当属性被取消时释放,这意味着当用户想要再次使用昂贵的 VC 时,我们每次将分配相同数量的内存。这在分析器中很容易发现,因为图表一直在攀升。
但是,如果我只将昂贵的 VC 定义为实例变量并定义我自己的 setter&getter,则分析器分配图实际上会在变量被取消时立即减少,并在每次新分配时以相同的数量返回。
所以我的问题是,为什么一个变量“似乎”在定义为实例变量时被释放,但在定义为属性时却没有?
// What I call defining something as an instance variable:
@interface SomeViewController ()
{
UIPopoverController *somePopover;
}
// What I call defining something as a property
@property (nonatomic,strong) UIPopoverController *somePopover;
// Nilling out a property which does not get allocated unless it does not have a parent (root node memory graph wise)
self.somePopover = nil;
// Nilling out an instance variable which does make the memory graph in the profiler go down by the same amount it went up
somePopover = nil;
AFAIK,您不能强制对象释放其所有内存,直到其父调用 deallocate 其所有子级都被级联释放.. https://stackoverflow.com/a/7631831/2536815