我有一个具有bar属性的NSFoo类。我想有一个类方法来获取一个带有bar属性集的NSFoo实例。这与NSString stringWithFormat类方法类似。签名将是:
+ (NSFoo *) fooWithBar:(NSString *)theBar;
所以我会这样称呼它:
NSFoo *foo = [NSFoo fooWithBar: @"bar"];
我认为这可能是正确的:
+ (NSFoo *) fooWithBar:(NSString *)theBar {
NSFoo *foo = [[NSFoo alloc] init];
foo.bar = theBar;
[foo autorelease];
return foo;
}
看起来不错吗?
答案 0 :(得分:2)
是。看起来不错。你的实现似乎是一种常见的做法。
答案 1 :(得分:2)
是的,您的实施看起来是正确的。由于-[NSObject autorelease]
返回self
,因此您可以将return语句写为return [foo autorelease]
。如果您打算使用自动释放(而不是发布),有些人建议在分配时自动释放对象,因为它使意图清晰并将所有内存管理代码保存在一个位置。然后您的方法可以写成:
+ (NSFoo *) fooWithBar:(NSString *)theBar {
NSFoo *foo = [[[NSFoo alloc] init] autorelease];
foo.bar = theBar;
return foo;
}
当然,如果存在-[NSFoo initWithBar:]
,您可能会将此方法编写为
+ (NSFoo *) fooWithBar:(NSString *)theBar {
NSFoo *foo = [[[NSFoo alloc] initWithBar:theBar] autorelease];
return foo;
}