DevPrep

Все темы › Objective-C

MRC vs ARC — в чём разница?

Middle PRO

Суть

Обе модели — подсчёт ссылок: у объекта есть retain count, при нуле вызывается dealloc. Разница в том, кто расставляет retain/release/autorelease.

#import <Foundation/Foundation.h>

@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@end

#if !__has_feature(objc_arc)
// MRC: сеттер пишется вручную
@implementation Person
- (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        _name = [name copy];
    }
}
- (void)dealloc {
    [_name release];
    [super dealloc];
}
@end
#else
// ARC: компилятор генерирует то же самое из атрибута copy
@implementation Person
@end
#endif

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store