为什么要以环形方式初始化将成为属性的对象?

JoB*_*324 1 iphone objective-c

有三个方面可以做到的原因是什么?

以下是developer.apple.com的一些代码:

UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

self.navigationController = aNavigationController;

[aNavigationController release];
Run Code Online (Sandbox Code Playgroud)

......在同一行中同样的事情:

self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
Run Code Online (Sandbox Code Playgroud)

它似乎干净,简单,直截了当.我以前遇到过一个没有被保留的属性的麻烦,导致[对象释放]在不应该的时候销毁对象(据我所知 - 保留属性已经设置).使用单行公式就像花花公子一样.

Bar*_*ark 6

Objective-C 内存管理规则规定,通过alloc一个对象实例,您是retain该实例的所有者(共享其他对象),因此您必须releaseUINavigationController何时放弃所有权以防止内存泄漏.在非垃圾收集的环境中(例如在iPhone上),这意味着平衡alloccopy(或包含"黄金"或"复制"的方法)用releaseautorelease.那么你的第二个片段就是

self.navigationController = [[[UINavigationController alloc] initWithRootViewController:rootViewController] autorelease];
Run Code Online (Sandbox Code Playgroud)

如果您可以避免 autorelease在内存有限的环境(如iPhone)上使用,最好使用显式release.-[NSObject autorelease]将接收器添加到当前的电流NSAutoreleasePool,随后将-release在未来的某个时间调用池中的对象.当你想要小心内存使用时,"未来的某个时间"并不是一个好主意.因此,在iPhone上你的第一个例子是标准用法.