我有一个这样的二传手:
- (UIImagePickerController *) foto {
if (_foto == nil) {
_foto = [[UIImagePickerController alloc] init];
_foto.delegate = self;
}
return _foto;
}
声明为
@property (nonatomic, retain) UIImagePickerController *foto;
带
@synthesize foto = _foto;
在我的dealloc上我有
[_foto release];
在我的代码的某些时候,我想要这样做
self.foto = nil;
但是我的灵魂中的某些东西说分配给self.foto的对象之前会泄漏,因为它是在setter上的分配...我该如何使它正确?
感谢。
答案 0 :(得分:1)
编辑:不,那应该没问题。只要你在发布之前没有为_foto指定别的东西,它就应该有效。
烨。您创建一个对象,然后松开指向它的指针。如果你在init行上抛出一个autorelease,那将解决它。你也可以使用ARC。
init行实际上没有做任何事情......您将指针指向您创建的对象,然后将其指定给其他对象。
答案 1 :(得分:1)
我认为那里没有泄漏。当你像这样分配给self.foto时:self.foto = nil;
,它将自动释放前一个。_foto = nil;
。如果您通过这种方式分配它:{{1}},则需要在分配之前手动释放它。
答案 2 :(得分:0)
是的,有效,不会泄漏。设置_foto
的值时,其保留计数为1(因为您调用了alloc
)。只要你在dealloc
中释放它(你曾经说过你做过),你应该没问题,因为保留计数会回到0.除非你的二传手也是你写的,并且写得不正确。如果它不是nil
,它需要显式释放旧值。像这样:
- (void)setFoto:(UIImagePickerController*)foto {
if (_foto) {
[_foto release];
_foto = nil;
}
if (foto)
_foto = [foto retain];
}