这会有用吗?

时间:2011-02-01 11:42:35

标签: objective-c

UILabel *testLbl = [[self alloc] init];

这就是混乱开始的地方:

通常最好使用self之外的变量来引用类中的实例 方法:

+ (id)rectangleOfColor:(NSColor *)color {
id newInstance = [[Rectangle alloc] init]; // GOOD [newInstance setColor:color]; return [newInstance autorelease];
}

实际上,不是在类方法中将alloc消息发送给类,而是将alloc发送给self通常更好。这样,如果类被子类化,并且子类接收到rectangleOfColor:消息,则返回的实例将与子类的类型相同(例如,NSArray的数组方法由NSMutableArray继承)。

+ (id)rectangleOfColor:(NSColor *)color {
id newInstance = [[self alloc] init]; // EXCELLENT [newInstance setColor:color]; return [newInstance autorelease];
}

2 个答案:

答案 0 :(得分:2)

不,它会导致“UILable unclared(首次使用此功能)”错误。

答案 1 :(得分:1)

不,它不会起作用。在第一行中,您将alloc消息发送到类的实例。在您从Apple的文档中复制的示例中,他们正在向 Class alloc发送Rectangle条消息。不同之处在于你的行(显然)在实例方法中,Apple的示例是在类方法中。 There is a difference

就像@Denis提到的那样,你可以通过说[[[self class] alloc] init]来做你想做的事情,但在实践中,不要这样做。你几乎从不需要这种灵活性的灵活性,它只会使新对象的意图变得混乱。