Rob*_*Rob 3 iphone memory-leaks memory-management objective-c
在我阅读的几乎所有书籍和我经历的例子中,我看到指针以这种方式初始化.假设我有一个我想初始化的类变量NSString*myString.我几乎总会看到这样做:
-(id)init {
if (self = [super init]) {
NSString *tempString = [[NSString alloc] init];
self.myString = tempString;
[tempString release];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能做以下事情呢?
-(id)init {
if (self = [super init]) {
self.myString = [[NSString alloc] init];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么一开始就需要额外的tempString,但我可能会在这里遗漏内存管理.我想要做的事情是可接受的还是会引起某种泄漏?我已经阅读了developer.apple.com上的内存管理指南,除非我只是遗漏了一些内容,否则我看不出有什么区别.
如果self.myString是保留属性,则第二个示例必须是
-(id)init {
if (self = [super init]) {
self.myString = [[[NSString alloc] init] autorelease];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
否则会泄漏 我只能假设是这种情况,第一个例子只是想避免使用autorelease.
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |