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

Objective-C

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
#1

ARC и свойства - Objective-C

03.10.2012, 14:56. Просмотров 2672. Ответов 19
Метки нет (Все метки)

Добрый день! Такой вопрос. В режиме ARC , в каких случаях нужно писать у свойства nonatomic, а в каких atomic? Смотрел документацию, смотрел статьи на русском, так и не понял суть, объясните кто-нибудь простым языком, если можно. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2012, 14:56     ARC и свойства
Посмотрите здесь:

Свойства - Objective-C
Добрый день! У меня проект с ARC. Я задал свойство @property (nonatomic,strong) UITableView *theTableView;. Синтезирировал его так...

Видимость свойства - Objective-C
Всем привет! в Классе LoadingData.h @property (nonatomic, retain) NSMutableDictionary *indexFullData; в LoadingData.m @synthesize...

Свойства класса - Objective-C
Здравствуйте! Пытаюсь разобраться со старым и новым способами записи свойств класса. Нашел здесь ссылку...

Свойства и переменные - Objective-C
добрый день! продолжаю учить obj c. Не понял один момент со свойствами. кратко создал класс со свойствами и в main импортировал его. ...

Pie, arc - C++ Builder
http://www.az-design.ru/index.shtml?Support&SoftWare&Delphi/D3/SB20Pie можете растолковать что к чему? Вроде по русски написано но...

Файлы redo и arc - Oracle
здравствуйте. мне необходимо выполнить следующую задачу: выполнить некоторые изменения с таблицей ( insert update delete), а...

ARC Informatique PCVue 8.10 SP5 - SCADA
ARC Informatique PCVue 8.10 SP5 - Где есть описание. Где можно купить, или какая фирма занимается (если знаете подскажите и цену). ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
03.10.2012, 19:11     ARC и свойства #2
atomic - постараюсь объяснить:
Если 2 потока работают и первый(А) обращается к геттеру, а Б в это же время обращается к сеттеру одного и того же свойства, то atomic Гарантирует то, что в А вернется целое неиспорченное значение, не смотря ни на какие другие действия со стороны других потоков.
По сути, атомарная операция говорит нам о том, что если выполняется атомарная функция, то на уровне CPU невозможно прервать выполнение этой функции. Она(функция) выполнится полностью.

Однако это не гарантирует, что А получит одно и тоже значение, если в этот момент потоки Б, В и Г одновременно вызывают сеттер у свойства.

nonatomic не гарантирует такой целостности , однако он значительно быстрее.

А ARC\не ARC вообще на это дело не влияет. ARC это совсем другая тема.

Добавлено через 34 минуты
На самом деле влияет(но на скорость работы, и зависимости от самописных либо synthesize методов доступа)
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
04.10.2012, 11:21  [ТС]     ARC и свойства #3
Спасибо.Теоретически понятно. А практически, для каких объектов обычно указывают atomic?
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
04.10.2012, 14:28     ARC и свойства #4
Обычно - тут не совсем подходящее слово.
Все зависит от ситуации. А ситуации бывают разные.
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
04.10.2012, 14:33  [ТС]     ARC и свойства #5
А можно пару примеров использования atomiс?
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
12.10.2012, 14:07  [ТС]     ARC и свойства #6
Решил проверить параметр atomic/nonatomic . Добавил в контроллер свойство @property (nonatomic,copy) NSString * path; Создал 2 потока - один обращается к геттеру, второй к сеттеру свойства. Поменял nonatomic на atomic, но во втором потоке всё равно выводится то значение, которое присвоил первый поток. Atomic разве не должен хранить первоначальное значение?
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 self.path = @"init";
 [NSThread detachNewThreadSelector:@selector(thread1:) toTarget:self withObject:nil];    
 [NSThread detachNewThreadSelector:@selector(thread2:) toTarget:self withObject:nil]; 
 
 
-(void) thread2:(id)anObject{
    
    NSLog(@"%@", self.path); //всё равно выдает "thread1String"
 
[NSThread exit];
}
 
 
 
-(void) thread1:(id)anObject{
 
    self.path = @"thread1String";
[NSThread exit];
}
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
12.10.2012, 15:29     ARC и свойства #7
Цитата Сообщение от andrei0077 Посмотреть сообщение
Спасибо.Теоретически понятно. А практически, для каких объектов обычно указывают atomic?
Значит непонятно.
С чего бы в переменной должно быть другое значение? Вы присвоили "thread1String", Вы его и получили.
Вы думаете, что 2й поток обратится к переменной перед 1м? Вы ошибаетесь
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
12.10.2012, 15:37  [ТС]     ARC и свойства #8
Я понимаю, что второй поток обратился после 1-го. Они же не могут одновременно к ней обратиться. Получается, кто первый обратился, тот и меняет значение, а кто второй обратился, тот получает уже новое значение. А чём тогда смысл свойства atomic?
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
12.10.2012, 16:12     ARC и свойства #9
Цитата Сообщение от andrei0077 Посмотреть сообщение
Они же не могут одновременно к ней обратиться.
Вот именно что могут.
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
12.10.2012, 16:14  [ТС]     ARC и свойства #10
Цитата Сообщение от zulkis Посмотреть сообщение
Вот именно что могут.
А, ну тогда понятно. Тогда последний вопрос. Как в моём примере сделать, чтоб они одновременно обратились?
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.10.2012, 16:54     ARC и свойства #11
Ответ на ваш вопрос - запустите 2 цикла обращений в разных потоках с очень маленьким интервалом. И обращения совпадут.
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
13.10.2012, 19:24  [ТС]     ARC и свойства #12
Цитата Сообщение от zulkis Посмотреть сообщение
Ответ на ваш вопрос - запустите 2 цикла обращений в разных потоках с очень маленьким интервалом. И обращения совпадут.
А можете написать код? Я совсем не понимаю про интервалы.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.10.2012, 09:32     ARC и свойства #13
Objective-C
1
2
3
4
5
6
7
8
- (void)doMagic {
    [NSThread detachNewThreadSelector:@selector(stringWriter) toTarget:self withObject:nil];//запускаем метод в другом потоке
}
 
- (void)stringWriter {
    NSTimer *timer = [NSTimer timerWithTimeInterval:0.01 target:self selector:@selector(readString) userInfo:nil repeats:YES]; //вызов "someMethod"а будет происходить с интервалом 0.01 секунды.
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];// добавляем таймер в текуший runLoop
}
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
15.10.2012, 13:22  [ТС]     ARC и свойства #14
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
- (void)loadView {
    
     
    [NSThread detachNewThreadSelector:@selector(stringReader) toTarget:self withObject:nil];
    [NSThread detachNewThreadSelector:@selector(stringWriter) toTarget:self withObject:nil];
 
     }
 
 
- (void)stringWriter {
    
 
    NSTimer *timer = [NSTimer timerWithTimeInterval:0.01 target:self selector:@selector(writeString) userInfo:nil repeats:YES]; 
      [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
 
 
- (void)stringReader {
   
 
    NSTimer *timer = [NSTimer timerWithTimeInterval:0.01 target:self selector:@selector(readString) userInfo:nil repeats:YES]; 
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];    
}
 
 
 
- (void)writeString {
 
    self.filePath = @"newString";
}
 
 
- (void)readString {
    
    NSLog(@"%@",self.filePath);
    
}
Насколько я понял, writeString и readString сейчас вызываются одновременно. Но почему, когда я меняю nonatomic на atomic, ничего не меняется?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 14:44     ARC и свойства
Еще ссылки по теме:

Ошибка загрузки оборудования ARC - Windows 7
залез в биос сбил настройки на чёрном экране Ошибка загрузки оборудования ARC сбросил настройки в заводские проблема осталась. я в...

Arcsin(x), arccos(x) и другие arc - Математика
Все ли знают обратные тригонометрические функции? Это знают все 1) arcsin(-x) = -arcsin(x) 2) arctg(-x) = -arctg(x) А это? 3)...

Как выразить из числа Arc tg - C++
Подскажите пожалуйста. Как выразить из числа Arc tg из переменой zn в градусах!

Как выразить из числа Arc tg в градусах - C#
Подскажите пожалуйста. Как выразить из числа Arc tg из переменой zn в градусах!

Функция Arc. Зеркальное отображение кривой. - C++ Builder
Привет. С помощью функции Arc у меня строится некоторая кривая, что и как мне преобразовать чтобы получить зеркальное отображение уже...


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

Или воспользуйтесь поиском по форуму:
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.10.2012, 14:44     ARC и свойства #15
А что должно то поменяться? Я не въезжаю в Вашу тему.
Вы сетите строчку каждый раз, ее же и считываете. В чем подвох?
Что Вы ожидаете получить?
Yandex
Объявления
15.10.2012, 14:44     ARC и свойства
Ответ Создать тему
Опции темы

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