他们为什么用这种方式初始化指针?

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上的内存管理指南,除非我只是遗漏了一些内容,否则我看不出有什么区别.

T .*_*T . 5

如果self.myString是保留属性,则第二个示例必须是

-(id)init { 
    if (self = [super init]) { 
        self.myString = [[[NSString alloc] init] autorelease]; 
    } 
    return self; 
} 
Run Code Online (Sandbox Code Playgroud)

否则会泄漏 我只能假设是这种情况,第一个例子只是想避免使用autorelease.