Будет ли это работать? - PullRequest
       0

Будет ли это работать?

1 голос
/ 01 февраля 2011
UILabel *testLbl = [[self alloc] init];

Вот тут и началась путаница:

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

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

Фактически, вместо того, чтобы отправлять сообщение alloc классу в методе класса, часто лучше отправлять alloc для себя. Таким образом, если класс разделен на подклассы, а подгруппа получает rectangleOfColor: message, возвращаемый экземпляр будет того же типа, что и подкласс (например, метод массива NSArray наследуется NSMutableArray).

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

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

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

1 голос
/ 01 февраля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...