自 iOS 3 以来我没有做过任何 iOS 开发,所以我的记忆有点模糊(尽管内存管理从来都不是我为之苦苦挣扎的事情,而且我对此很清楚)。
我正在开始一个新项目,但不明白为什么骨架代码的结构是这样的:
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc]
initWithFrame:[[UIScreen mainScreen] bounds]]
autorelease];
// ... snip ...
}
- 为什么窗口对象会被自动释放?我很确定在旧的 iOS 版本中从来没有这样过。
- 从哪里来
_window
?这只是另一种访问方式[self window]
吗?
我会这样写:
- (void)dealloc
{
[self.window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc]
initWithFrame:[[UIScreen mainScreen] bounds]];
// ... snip ...
}
我总是鼓吹永远不要释放自动释放的对象,实际上这样做通常会导致分段错误。