2013-07-23 2 views
1

Если бы я хотел создать UIImage, например, то, что бы разница в следующих двух строк кода:Objective C: Инициализация объектов

UIImage *img = [UIImage imageWithCGImage:cgImage]; 

UIImage *img = [[UIImage alloc] initWithCGImage:cgImage]; 

Является ли это просто случай «же конце концов, разные означает"?

ответ

5

imageWithCGImage: возвращает экземпляр с автоповтором, а initWithCGImage: возвращает изображение, которое вы должны освободить. Обычно вы можете рассчитывать на метод класса для возврата объекта с автореализацией, тогда как любой экземпляр init возвращает объект, который вы должны освободить.

Если вы используете ARC-код, они в основном делают то же самое, но увидеть этот родственный вопрос для получения дополнительной информации: With ARC, what's better: alloc or autorelease initializers?

+1

@ConnorLirot вам все еще нужно иметь достаточно хорошее понимание того, как управление памятью работает под АРК. Итак, да, это действительно так. –

+1

В ARC, выбор которого обычно не имеет значения. Единственный раз, когда вам, вероятно, нужно заботиться о ARC, - это работать с '@ autoreleasepool'. – rmaddy

+0

@rmaddy Не могли бы вы рассказать о том, что может произойти при работе с @autoreleasepool? –

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