【发布时间】:2012-08-10 21:52:36
【问题描述】:
我有以下代码,想知道当 iOS 重新收集分配的内存时会发生什么。 p1 指向的内存是否会在之后自动释放,尽管它现在指向不同的内存?而且 p2 指向的内存也会被自动释放,因为 p1 在语义上意味着在开始时指向自动释放的内存?
NSMutableArray *p1 = [NSMutableArray arrayWithCapacity:10];
NSMutableArray *p2 = [[NSMutableArray alloc] init];
// what will happen to the memory p1 and p2 point to
// after the following assignment, and at later stage?
p1 = p2;
【问题讨论】:
-
具有托管内存的语言通常不会出现内存泄漏。
-
重读您的问题,您实际上是在询问
p1的初始设置的autorelease性质是否是变量p1或其指向的对象的函数。是后者;获取retainCount、autorelease等的是对象本身。变量p1和p2仅仅是指向对象的指针。当你设置p1 = p2时,它不会改变p2指向的对象的+1retainCount,也不会使它成为autorelease对象。 -
正确。所以 p1 最初指向的对象的性质仍然是自动释放的,因此它会在适当的时候由操作系统自动释放,对吗?
标签: ios memory-management memory-leaks autorelease