这是一个与 Objective-C 内存管理相关的问题。
在关于内存管理页面上有一些示例
- (NSString *)fullName {
NSString *string = [[[NSString alloc] initWithFormat:@"%@ %@",
self.firstName, self.lastName] autorelease];
return string;
}
第二个
- (NSString *)fullName {
NSString *string = [NSString stringWithFormat:@"%@ %@",
self.firstName, self.lastName];
return string;
}
唯一的区别是在第一个示例中调用了初始化程序,而在第二个示例中调用了类工厂方法。
基本内存管理规则部分说,在alloc
调用后我将拥有我分配的对象。因此,在第一个示例中,我分配了一个对象并同时对其进行了初始化。在此,我拥有该对象并且必须拥有release
它。在第二个例子中我没有。但是工厂方法不是stringWithFormat:
在一次调用中做同样的事情吗,我的意思是分配对象并初始化它?
所以主要问题是,为什么我不必在第二个示例中释放对象?实现类工厂方法时有什么特殊的内存管理规则吗?