为什么要制作临时对象,将它们设置为变量,然后释放它们?

Jac*_*nkr 1 objective-c ios

我经常看到类似的东西:

NSArray *tmpArr = [[NSArray alloc] initWithObjects:@"Info", nil];
self.userInfo = tmpArr;
[tmpArr release];
Run Code Online (Sandbox Code Playgroud)

代替:

self.userInfo = [[NSArray alloc] initWithObjects:@"Info", nil];
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么顶级代码样本更受欢迎?内存管理比第二个更准确吗?

ayo*_*yoy 5

由于未释放数组,第二个代码段会导致内存泄漏.在大多数情况下,对象类型的属性(例如NSArray在这种情况下)是retain或者copy属性,这意味着它们要么增加指定值的引用计数,要么复制整个对象.然后,如果不再需要局部变量,则可以(并且应该)释放局部变量.

第二个代码剪切的非泄漏替代方法将使用autorelease:

self.userInfo = [[[NSArray alloc] initWithObjects:@"Info", nil] autorelease];
Run Code Online (Sandbox Code Playgroud)

或者干脆:

self.userInfo = [NSArray arrayWithObjects:@"Info", nil];
Run Code Online (Sandbox Code Playgroud)