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];
}
答案 0 :(得分:2)
不,它会导致“UILable unclared(首次使用此功能)”错误。
答案 1 :(得分:1)
不,它不会起作用。在第一行中,您将alloc
消息发送到类的实例。在您从Apple的文档中复制的示例中,他们正在向 Class alloc
发送Rectangle
条消息。不同之处在于你的行(显然)在实例方法中,Apple的示例是在类方法中。 There is a difference
就像@Denis提到的那样,你可以通过说[[[self class] alloc] init]
来做你想做的事情,但在实践中,不要这样做。你几乎从不需要这种灵活性的灵活性,它只会使新对象的意图变得混乱。