Как объединить +alloc и -init?

Я пишу метод для подкласса NSObject, который объединяет общие методы NSObject «+alloc» и «-init». Это сделано для экономии времени при создании экземпляров класса.

(Этот подкласс также является абстрактным классом. Он похож на замену подкласса NSObject, поэтому метод должен быть совместим с подклассом.)

Для метода make это лучший способ написать его:

+(id)make
{
    id newObject = [[self.class alloc] init];

    return newObject;
}

Если есть лучший способ, то каким?

Спасибо


person Macro206    schedule 30.07.2012    source источник
comment
Для справки: разработчик. apple.com/library/mac/#documentation/Cocoa/Reference/   -  person e.James    schedule 30.07.2012
comment
Я предполагаю, что под экономией времени при создании экземпляров класса вы подразумеваете экономию времени при наборе текста, а не экономию некоторых циклов ЦП, потому что метод класса на самом деле медленнее.   -  person Sergey Kalinichenko    schedule 30.07.2012
comment
Внутри метода класса self — это класс, а [self class] не требуется. Это можно просто написать return [[self alloc] init];   -  person jscs    schedule 31.07.2012


Ответы (4)


Лучше просто использовать +new, который уже существует :)

person jtbandes    schedule 30.07.2012

вы можете использовать [self.class new], что равнозначно вызову [[self.class alloc] init]

person John Corbett    schedule 30.07.2012
comment
Внутри метода класса self является классом, а [self class] не требуется. - person jscs; 31.07.2012

Я считаю, что new работает очень хорошо.

SomeObject *object = [SomeObject new];
person InsertWittyName    schedule 30.07.2012

чтобы сделать просто:

id newObject = [[self alloc] init];

вы можете заменить его на:

id newObject = [self new];

Но помните, что во многих определенных объектах вы можете использовать другие инициализаторы, тогда вам нужно использовать:

...alloc] init...]

структура.

person Luk452    schedule 01.09.2012