Objective c 这样行吗?
这就是混乱的开始: 通常最好使用self以外的变量来引用类内的实例 方法: 事实上,与其在类方法中将alloc消息发送给类,不如将alloc发送给self。这样,如果类是子类,并且子类接收到rectangleOfColor:消息,则返回的实例将与子类的类型相同(例如,NSArray的数组方法由NSMutableArray继承)Objective c 这样行吗?,objective-c,Objective C,这就是混乱的开始: 通常最好使用self以外的变量来引用类内的实例 方法: 事实上,与其在类方法中将alloc消息发送给类,不如将alloc发送给self。这样,如果类是子类,并且子类接收到rectangleOfColor:消息,则返回的实例将与子类的类型相同(例如,NSArray的数组方法由NSMutableArray继承) 否,它将导致“UILable undeclared(首次在此函数中使用)”错误。否,它将不起作用。在第一行中,您将向类的实例发送alloc消息。在您从Apple文档中复制
否,它将导致“UILable undeclared(首次在此函数中使用)”错误。否,它将不起作用。在第一行中,您将向类的实例发送
alloc
消息。在您从Apple文档中复制的示例中,他们将alloc
消息发送到类Rectangle
。区别在于你的代码行(显然)在一个实例方法中,而苹果的示例在类方法中
就像上面提到的@Denis一样,你可以通过说
[[self class]alloc]init]
来做你想做的事情,但实际上,不要这样做。您几乎不需要这种灵活性,它只会混淆新对象的意图 意味着两者之间有什么区别:UILabel*testLbl=[[self alloc]init];UILabel*testLbl=[[UILabel alloc]init];您是否在UILabel实例方法中运行此操作?然后您可以使用[[[self class]alloc]init]
;
UILabel *testLbl = [[self alloc] init];
+ (id)rectangleOfColor:(NSColor *)color {
id newInstance = [[Rectangle alloc] init]; // GOOD [newInstance setColor:color]; return [newInstance autorelease];
}
+ (id)rectangleOfColor:(NSColor *)color {
id newInstance = [[self alloc] init]; // EXCELLENT [newInstance setColor:color]; return [newInstance autorelease];
}