Понимание свойств путем написания собственного метода установки - PullRequest
0 голосов
/ 09 июня 2011

Так что у меня проблемы с OOAD, свойствами, ключевым словом self и т. Д. Я хотел просто создать простой тестовый проект с UITableView.У меня есть ивар из

NSArray *tableData;

, как бы я написал для него метод установки и получения?Я думал, что мой сеттер будет выглядеть так:

- (void)setTableData:(NSArray *)array {
    [tableData autorelease];
    tableData = [array retain];
}

Затем, когда я пытаюсь использовать этот метод в моем viewDidLoad, я понимаю, что мне нужно создать экземпляр моего ViewController.Это похоже на то, что не нужно делать, когда я смотрю, как это делается в книгах, где они создают свойство для NSArray, а затем в viewDidLoad просто делают

NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", nil];
    self.tableData = array;
[array release];

Я просто пытаюсь понять, чтоидет за кулисы, пытаясь понять принципы OOAD, ivars, свойства, self и т. д. Заранее спасибо.

1 Ответ

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

Я уверен, что вы уже знаете, что использование @synthesize создаст для вас методы установки / получения, но полезно знать, что происходит "под капотом", чтобы понять концепции.

Что касается метода установки, вам, вероятно, лучше с чем-то вроде этого:

- (void)setTableData:(NSArray *)array {
    if (tableData != array) {
        [tableData release];
        tableData = [array retain];
    }
}

Это в основном проверяет, чтобы убедиться, что новый массив действительно отличается от текущего. Если это так, он освобождает старый экземпляр и устанавливает новый.

Для метода получения просто используйте:

- (NSArray *)tableData (
    return tableData;
}

Доступ к этому можно получить, позвонив по номеру self.tableData. И, конечно же, настройка массива выполняется так же, как вы, с self.tableData = array;

Надеюсь, это поможет. Если вам нужна дополнительная информация, просто скажите об этом, и я с радостью постараюсь объяснить вам подробнее

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