假设我有一个类名为MyTestClass.h。当属性分配两次时避免内存泄漏
类结构是像
@implementation MyTestClass
@synthesize testString;
-(id) init{
[self setTestString:@""];
return self;
}
-(void)dealloc{
[self.testString release];
testString = nil;
[super dealloc];
}
@end
现在我创建的对象MyTestClass
@interface MyTestClass : NSObject {
NSString *testString;
}
@property (nonatomic, retain)NSString * testString;
@end
.m文件和分配的TestString两次
MyTestClass * myTestClass = [[MyTestClass alloc] init];
[myTestClass setTestString:@"Hi"];
[myTestClass setTestString:@"Hello"];
现在我想,两次我的testStrings内存泄漏! (1至的init(),另一个通过我的第一setTestString法)
,对吗?或将@property (nonatomic, retain)
处理/释放先前分配的内存?
,或者在这种情况下,将我需要重写setTestString()在MyTestClass.m如下面的代码
-(void)setTestString:(NSString *)tempString{
[testString release];
testString = nil;
testString = [tempString retain];
}
任何在这个问题上的帮助表示赞赏。
谢谢。
你没有泄漏任何我能看到的 - 尽管我使用ARC。据我所知,如果你创建了一个赋值变量,然后在你的方法结束之前没有释放它,你只会在这种情况下泄漏。 – Dustin 2012-07-05 14:59:48
请注意,在调用'super'之前,'dealloc'方法也可以简化为'self.testString = nil;',它将使用自动生成的setter自动释放之前的testString值。 – Turix 2012-07-05 15:02:33
苹果文档特别声明不要在init和dealloc方法中使用访问器。希望引用文档,但目前无法找到它,这将不得不做的事情http://stackoverflow.com/questions/192721/why-shouldnt-i-use-objective-c-2-0-accessors-in- init-dealloc – 2012-07-05 15:08:43