Iphone 设置self后释放temp对象是否正确?
假设player是(非原子的,retain),并且是使用player=\u player合成的,那么以下哪种场景是正确的编码实践 情景AIphone 设置self后释放temp对象是否正确?,iphone,objective-c,initialization,release,self,Iphone,Objective C,Initialization,Release,Self,假设player是(非原子的,retain),并且是使用player=\u player合成的,那么以下哪种场景是正确的编码实践 情景A MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; self.player = mp; [mp release]; 情景B MPMoviePlayerController *mp = [[MPM
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
self.player = mp;
[mp release];
情景B
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
self.player = mp;
到目前为止,我一直在使用场景A作为一般实践,但我认为这可能会导致代码内存泄漏
谢谢你的帮助
编辑1:
计时器也是如此,它们给我带来了麻烦。如果我使用下面的代码,这是正确的吗?如果timerMap也是(非原子的,retain),则使用timerMap=\u timerMap
self.timerMap = [[NSTimer scheduledTimerWithTimeInterval:fps target:self selector:@selector(updateAnimationTimer) userInfo:nil repeats:YES] autorelease];
当发布时,只是失效是可以的,还是应该失效然后发布?方案A肯定是要走的路,方案B会泄漏
mp
资料来源:
编辑1:
您发布的代码错误,再次设置timerMap
属性时会导致崩溃。您不能自动释放它
self.timerMap = [NSTimer scheduledTimerWithTimeInterval:fps target:self selector:@selector(updateAnimationTimer) userInfo:nil repeats:YES];
当你不再需要计时器时,只要
self.timerMap = nil;
这将调用计时器上的release
方法,并将指针设置为nil场景A肯定是要走的路,场景B将泄漏mp
资料来源:
编辑1:
您发布的代码错误,再次设置timerMap
属性时会导致崩溃。您不能自动释放它
self.timerMap = [NSTimer scheduledTimerWithTimeInterval:fps target:self selector:@selector(updateAnimationTimer) userInfo:nil repeats:YES];
当你不再需要计时器时,只要
self.timerMap = nil;
这将调用计时器上的release
方法,并将指针设置为nil场景A是否正确。场景B实际上会导致内存泄漏,这是因为self.player=mp;保留引用计数器
以下代码也是正确的:
MPMoviePlayerController *mp = [[[MPMoviePlayerController alloc] initWithContentURL:movieURL] autorelease];
self.player = mp;
情景A是正确的。场景B实际上会导致内存泄漏,这是因为self.player=mp;保留引用计数器
以下代码也是正确的:
MPMoviePlayerController *mp = [[[MPMoviePlayerController alloc] initWithContentURL:movieURL] autorelease];
self.player = mp;
第一个是正确的内存管理,但我倾向于:
self.player = [[[MPMoviePlayerController alloc]
initWithContentURL:movieURL]
autorelease];
这样,我将该对象的所有内存管理保持在一行上
编辑
以下是对问题的编辑
现在的计时器对象已经自动释放了,您不应该再向它添加自动释放。请看一下便利方法的说明。第一个是正确的内存管理,但我倾向于:
self.player = [[[MPMoviePlayerController alloc]
initWithContentURL:movieURL]
autorelease];
这样,我将该对象的所有内存管理保持在一行上
编辑
以下是对问题的编辑
现在的计时器对象已经自动释放了,您不应该再向它添加自动释放。请查看有关便利方法的说明。非常感谢,我的应用程序肯定有来自其他地方的内存泄漏。令人恼火的是,它没有被仪器检测到:(项目->分析工具很适合检测内存泄漏(它会检测到场景B)。试试看!非常感谢,我的应用程序肯定有来自其他地方的内存泄漏。令人恼火的是,它没有被仪器检测到:(Project->analysis工具很适合检测内存泄漏(它会检测到场景B)。试一试!有关合成和属性的说明,请参阅。有关合成和属性的说明。有关信息,您是否有机会帮助我编辑我的文章?谢谢您提供的信息,您是否有机会帮助我编辑我的文章?