Нужно ли мне объявлять переменную экземпляра, если я использую @property? - PullRequest
3 голосов
/ 11 декабря 2011

В Objective C теперь вы можете использовать @property и @synthesize для автоматической генерации методов get и set. Мой вопрос: мне все еще нужно объявить свойство в интерфейсе? Моя программа компилируется и работает без нее. Но большинство книг и других примеров все еще имеют это. Почему?

@interface Person : NSObject {
// do i need the declaration "NSString name;"? why?
// i have notice that my program works fine without it.
// but many programming examples still incude it.     
// NSString name;
}
@property NSString *name;
@end

@implementation Person
@synthesize name;
@end

Ответы [ 4 ]

3 голосов
/ 11 декабря 2011

Это зависит от времени выполнения. Современная среда выполнения используется в iOS, и вам не нужно объявлять ivars. Это не всегда так в OS X, хотя. Смотрите здесь - http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html

1 голос
/ 11 декабря 2011

То, о чем вы говорите, это ивар. Вам не нужно объявлять это, поскольку @synthesize добавляет это для вас. Раньше этого не было в случае с более старыми компиляторами (и, очевидно, до того, как @propertiy был добавлен к языку), поэтому многие люди и книги по-прежнему делают это.

PS: Вам также не нужен {...}, если у вас нет иваров, например ::

@interface Person : NSObject

@property NSString *name;
//...
0 голосов
/ 11 декабря 2011

Вам не нужно объявлять ивара.Директива @synthesize сделает это за вас, если вы опустите ivar.

0 голосов
/ 11 декабря 2011

Вам не нужно; ивар будет создан для вас. Но отладчик не покажет вам автоматически сгенерированные ивары, поэтому я все равно хотел бы объявить их.

...