2011-02-01 4 views
1
UILabel *testLbl = [[self alloc] init]; 

Это где началась путаница:Будет ли это работать?

Это, как правило, лучше использовать переменную, кроме себя, чтобы обратиться к экземпляру внутри метода класса :

+ (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

Выберите лучшие теги! – peoro

+0

Что вы подразумеваете под «работой»? – taskinoor

+0

означает, есть ли разница между двумя: UILabel * testLbl = [[self alloc] init]; UILabel * testLbl = [[UILabel alloc] init]; – Prabh

ответ

1

Нет, это не сработает. В вашей первой строке вы отправляете сообщение alloc на экземпляр класса. В примерах, которые вы скопировали из документации Apple, они отправляют alloc сообщениям КлассRectangle. Разница в том, что ваша строка (видимо) внутри метода экземпляра, примеры Apple находятся внутри методов класса. There is a difference.

Как упоминалось @Denis, вы можете делать то, что вы пытаетесь сделать, указав [[[self class] alloc] init], но на практике не делайте этого. Вы почти никогда не будете нуждаться в гибкости, которую это предлагает, и это только замалчивает цель нового объекта.

2

Нет, это приведет к ошибке "UILable необъявленной (первой пользы в этой функции)".

Смежные вопросы