Что такое современная среда выполнения? - PullRequest
5 голосов
/ 06 июля 2011

Примечание: Как правило, в методе dealloc вы должны освобождать переменные экземпляра объекта напрямую (вместо того, чтобы вызывать метод доступа set и передавать nilas параметр), как показано в этом примере:

- (void)dealloc {
    [property release];
    [super dealloc];
}

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

- (void)dealloc {
    [self setProperty:nil];
    [super dealloc];
}

Что такое современная среда выполнения в iOSразработка приложения точно?

1 Ответ

10 голосов
/ 06 июля 2011

Можно получить доступ к ivar напрямую, под тем же именем, что и синтезированное свойство.Директива @synthesize создает ivar от вашего имени, если он еще не существует, и поскольку это директива компилятора, ivar доступен во время компиляции.См. «Разница во времени выполнения» в главе «Объявленные свойства» языка программирования Objective-C.Как отметил Абизерн в комментарии, для ivar также можно указать любое имя: @synthesize coffee=tea; - здесь, tea - это ivar, а coffee - свойство.

Чтобы использовать ivar, просто обращайтесь к нему, как к любой другой переменной, без использования точечного синтаксиса.Следующее является абсолютно законным и работает, как и ожидалось:

@interface Grisby : NSObject {}
@property (retain) NSObject * obj;
@end

@implementation Grisby

@synthesize obj;

- (void) dealloc {
    [obj release], obj = nil;
    [super dealloc];
}

- (id) init {
    self = [super init];
    if( !self ) return nil;

    obj = [NSObject new];

    return self;
}

- (NSObject *) obj {
    return [[obj retain] autorelease];
}

@end

«Современная среда выполнения» была введена в Mac OS X 10.5 (Leopard) как часть перехода на 64-разрядную версию.Все версии iOS используют современную среду выполнения.Синтезированные переменные экземпляра являются особенностью современного времени выполнения, как отмечено в ссылке, которую я предоставил выше.

Другое ключевое отличие, , отмеченное в «Версии и платформы времени выполнения» Objective-CРуководство по программированию во время выполнения заключается в том, что переменные экземпляра являются «не хрупкими».В хранилище и доступ к ivar добавлен слой косвенности, который позволяет классам добавлять переменные, не влияя на хранение производных классов.Это также предположительно облегчает синтез переменных экземпляра.У Грега Паркера есть объяснение , касающееся котят, в нем содержится справочная информация в Mike Ash *1019*, а у Bavarious здесь на SO есть сообщение о хранилище ivarи расширения класса.

Вы можете увидеть другие вещи, которые изменились, хотя и без объяснений, в главе "Mac OS X Версия 10.5 Delta" Справочника по Objective-C Runtime.

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