Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
too young
1 / 1 / 0
Регистрация: 26.07.2011
Сообщений: 8
#1

Проблемы со свойством - Objective-C

05.10.2011, 02:11. Просмотров 894. Ответов 2
Метки нет (Все метки)

Если инициализировать свойство класса, созданное с использованием
Objective-C
1
@property (nonatomic, retain) NSArray *prop
в теле функции (void)init следующим способом:
Objective-C
1
prop = [NSArray arrayWithObjects:@"1", @"2", nil]
то где в коде будет ошибка, какие последствия в работе программы она будет иметь и в какой момент (в какой фунции) это может случиться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2011, 02:11     Проблемы со свойством
Посмотрите здесь:

Работа со свойством Checked Delphi
Работа со свойством Tag C++ Builder
Работа со свойством listindex Visual Basic
проблема со свойством clear HTML, CSS
Visual Basic Проблемы с свойством RecordCount элемента Data (VB 6.0)
проблема со свойством float HTML, CSS
Objective-C Проблемы с контроллерами
Delphi MaskEdit с свойством времени
Компонент со свойством множество Delphi
C (СИ) Класс А с полями a и b и свойством с
Assembler Подпрограмма с заданным свойством
Непонимание с свойством margin HTML, CSS

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Splitter
201 / 143 / 5
Регистрация: 13.01.2009
Сообщений: 554
05.10.2011, 13:15     Проблемы со свойством #2
а почему Вы думаете что будет ошибка?
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
19.10.2011, 12:16     Проблемы со свойством #3
Вместо
Objective-C
1
prop = [NSArray arrayWithObjects:@"1", @"2", nil]
нужно
Objective-C
1
self.prop = [NSArray arrayWithObjects:@"1", @"2", nil]
Поскольку в первом случае сеттер не будет вызван( если проперти привязана к переменной prop в интерфейсе) Это значит, что ретейна не будет и после дрейна текущего авторелиз пула память из под этого объекта будет помечена свободной и очень быстро будет перезаписана. Чаще всего можно будет увидеть ошибку "объект не распознает селектор", тк вместо массива там будет записано что-то другое.

Впрочем, до дрейна авторелиз пула падения проги при обращении к массиву не будет.

Можно провести забавный эксперимент:
Objective-C
1
2
3
4
5
6
7
8
9
10
- (id) init { 
if( (self = [super init]) ) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
prop = [NSArray arrayWithObjects:@"1", @"2", nil];
[pool drain];
NSArray* notRelatedArray = [NSArray arrayWithObjects:@"3", @"4", nil];
NSLog(@"%@", [prop objectAtIndex:0]);
}
return self;
}
И посмотреть на лог. Потом заменить prop = на self.prop = и посмотреть разницу.Ее,конечно, может и не быть, но на моей системе была
Yandex
Объявления
19.10.2011, 12:16     Проблемы со свойством
Ответ Создать тему
Опции темы

Текущее время: 20:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru