Где хранятся синтезированные ивары? - PullRequest
6 голосов
/ 22 мая 2011

Я читал об автоматически синтезированных иварах. Мой вопрос: "Где они автоматически распределяются?" Я ожидал, что они будут частью себя, чтобы я мог видеть их в отладчике, но, похоже, я могу увидеть их только путем вызова метода доступа (с помощью команды gdb 'po'). Разве в структуре класса / объекта нет места (как было бы для явно объявленного ivar)?

(Есть ли описание представления в памяти для современного объекта Objective-C?)

Будучи парнем из Си, мне очень неудобно не видеть, где все находится. : -Р

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Они добавляются к объекту target-c (который является структурой C), не отличающимся от обычного ivar, например:

@interface TestObject : NSObject {

}

@property (nonatomic, assign) int theInt;

@end

@implementation QuartzTestView

@synthesize theInt;

@end

Вы можете обратиться к theInt ivar напрямую (не через средства доступа к свойствам):

- (void)someMethod {
    theInt = 5;
}

OR

- (void)someOtherMethod {
    self->theInt = 10;
}
1 голос
/ 22 мая 2011

Похоже, это скажет вам: Как автоматические @ синтезированные ивари влияют на * реальный * sizeof (MyClass)?

Я тоже парень C в глубине души.Зачем использовать эти автоматически сгенерированные?Мне нравится смотреть на класс и видеть, что он держит в терминах данных.

Интересно: Аккуратно, как они взяли 64-битное изменение, чтобы сделать вещи лучше.http://www.sealiesoftware.com/blog/archive/2009/01/27/objc_explain_Non-fragile_ivars.html

0 голосов
/ 16 июня 2011

См. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html - используя современную среду выполнения, переменная экземпляра "будет синтезирована для вас".Хотя может быть неплохо добавить переменную самостоятельно, хотя (чтобы вы могли видеть ее при отладке в self), однако вы должны быть осторожны, чтобы не делать прямых назначений переменной экземпляра для сохранения или копирования свойств на основе.

...