Objective c 目标C中的自动释放和NSString
我现在一直在玩ObjC,以至于在“自动释放”方面我感到失落 在my.h中:Objective c 目标C中的自动释放和NSString,objective-c,Objective C,我现在一直在玩ObjC,以至于在“自动释放”方面我感到失落 在my.h中: NSString *sAStringMember; 在my.m中: -(void) createAString { NSString *sAString = [NSString stringWithString:[dummyCode...get String ffrom some input field for instance]]; sAStringMember = sAString; } 几个简短的问题: 在
NSString *sAStringMember;
在my.m中:
-(void) createAString
{
NSString *sAString = [NSString stringWithString:[dummyCode...get String ffrom some input field for instance]];
sAStringMember = sAString;
}
几个简短的问题:
(3)
-retain
或-copy
都可以
最好使用声明的属性
@interface Foo : ... {
NSString* sAStringMember;
}
@property(copy) NSString* sAStringMember; // or retain.
@end
...
@implementation Foo
@synthesize sAStringMember;
...
-(void) createAString {
self.sAStringMember = [dummyCode...get String ffrom some input field for instance];
}
-(void)dealloc {
...
[sAStringMember release];
[super dealloc];
}
@end
(另外,请避免使用匈牙利符号。)是的,如果您从其他地方保留指向某个对象的指针并将其保留,则必须始终复制或保留它。保留是首选,除非您想修改它,因为它不分配额外的内存,而且速度更快 对于有关何时释放字符串的问题,唯一可能的答案是:函数返回后的某个时间 在许多书中,您可以看到它将在下一个GUI事件被处理时发生,但这并不确定。在函数调用序列中,每个函数都可以打开和关闭自己的自动释放池 如果一个函数做了很多工作,它可以简单地创建它的自动释放池,并随时释放自动释放注册的对象