Разница в объявлениях переменных в классе какао - PullRequest
1 голос
/ 30 июня 2011

Я новичок в разработке для iOS, и я видел следующее в нескольких уроках, а также когда Xcode автоматически генерирует для меня код при создании подкласса одного из моих классов. Допустим, у меня есть следующие файлы .h и .m

#import <UIKit/UIKit.h>

@interface Class : NSObject {
    NSArray *_infos;
    NSString *_context;
}

@property (nonatomic, retain) NSArray *infos;
@property (nonatomic, retain) NSString *context;

@end

#import "Class.h"

@implementation Class

@synthesize infos = _infos;
@synthesize context = _context;

@end

А затем подумайте, как я обычно это делаю:

#import <UIKit/UIKit.h>

@interface Class : NSObject {
    NSArray *infos;
    NSString *context;
}

@property (nonatomic, retain) NSArray *infos;
@property (nonatomic, retain) NSString *context;

@end

#import "Class.h"

@implementation Class

@synthesize infos;
@synthesize context;

@end

Какая разница? Из нотации я могу сделать вывод, что они просто объявляют переменные как закрытые, но как это работает? Если я прав.

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Это глупое соглашение об именах.Используйте его, если хотите, оставьте, если нет.

Преимущество состоит в том, что аргумент метода / локальная переменная с именем context не конфликтует с ivar _context.Это не имеет ничего общего с конфиденциальностью, так как вы можете просто указать @private, чтобы сделать ivars приватными (или просто @synthesize их в первую очередь).

Недостатком является то, что вы подчеркиваете везде и подчеркиваетеиногда немного особенные в C (хотя знак подчеркивания, за которым следует строчная буква, зарезервирован только в области видимости файла, так что вы должны быть в порядке при условии, что ivar начинается со строчной буквы ...).Где необходимо, я вставляю подчеркивание в end , которое кажется менее грязным.

Sidenote: Некоторые люди используют method имена, начинающиеся со знака подчеркивания, чтобы означать "частный", но это соглашение зарезервировано Apple .

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

Единственное отличие - это имя ivars ("переменных экземпляра"), содержащих свойства.

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