【发布时间】:2011-09-12 17:51:26
【问题描述】:
我已经阅读了 Apple 的内存管理指南,但我看不到这种情况的解释...
很多时候,尤其是在编写一个类方法来返回一个类的实例时,我会这样开始,因为我看到它是这样完成的,而且它是有效的。
[注意]这段代码来自记忆——我回家后会更新它以展示一个真正有效的例子(我编了这个来说明它,但显然我记不太清了,无法构建一些东西有道理……
[编辑] 这是我的实际方法 - 当然每个人都是对的,我必须打电话给 alloc,我就是这样。
+ (id)player
{
Player *player = nil;
if ((player = [[[super alloc] initWithFile:@"rocket.png"] autorelease])) {
[player setProjectileType:kProjectileBullet];
[player setProjectileLevel:1];
[player setInvincible:YES];
[player setEmitter:[CCParticleSystemQuad particleWithFile:@"exhaust.plist"]];
[[player emitter] setPosition:ccp(0.0, player.contentSize.height/2)];
[player addChild:player.emitter];
}
return player;
}
所以我从回复中得到的是: * 声明实例只是给我一个指向内存位置的指针,并告诉 Xcode 对象将是什么类。 * 将指针设置为 nil 几乎只是将其设置为零 - 防止它在其中包含垃圾(对吗?) * 因为我是自动释放实例,所以返回的对象也是自动释放的。
感谢您帮助我理解这一点!
【问题讨论】:
-
你在哪里见过上面的“完成”?您在此处列出的代码没有意义,我不希望它起作用。
-
@Rob - 见我上面的编辑;今晚我将使用实际代码进行编辑。感谢您的耐心。
标签: objective-c ios memory-management