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

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

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

Windows 7 Ошибка загрузки оборудования ARC
Oracle Файлы redo и arc
Pie, arc C++ Builder
IOS и ARC
SCADA ARC Informatique PCVue 8.10 SP5
Свойства Objective-C
Свойства и переменные Objective-C
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для 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
 Аватар для 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
 Аватар для 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
 Аватар для 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
 Аватар для 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
 Аватар для 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, ничего не меняется?
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.10.2012, 14:44     ARC и свойства #15
А что должно то поменяться? Я не въезжаю в Вашу тему.
Вы сетите строчку каждый раз, ее же и считываете. В чем подвох?
Что Вы ожидаете получить?
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
15.10.2012, 15:13  [ТС]     ARC и свойства #16
Я видимо не допонял насчет геттера. Я когда считываю значение, я разве не к геттеру обращаюсь? Когда мы задаём значение ,то обращаемся к сеттеру, а когда получаем, обращаемся к геттеру. Разве не так?
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.10.2012, 19:58     ARC и свойства #17
Цитата Сообщение от andrei0077 Посмотреть сообщение
Я видимо не допонял насчет геттера. Я когда считываю значение, я разве не к геттеру обращаюсь? Когда мы задаём значение ,то обращаемся к сеттеру, а когда получаем, обращаемся к геттеру. Разве не так?
Все так, а результат то какой ждете?
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
16.10.2012, 09:12  [ТС]     ARC и свойства #18
Я хочу увидеть роль параметра nonatimic/ atomic . Вы говорили, что если 2 потока работают и первый обращается к геттеру, а второй это же время обращается к сеттеру одного и того же свойства, то atomic Гарантирует то, что в первый вернется целое неиспорченное значение. Сейчас вроде есть 2 таких потока, но я когда я меняю nonatomic на atomic , метод readString выводит то значение, которое задается в методе writeString. Или я чего-то не понимаю?
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
17.10.2012, 05:30     ARC и свойства #19
Цитата Сообщение от andrei0077 Посмотреть сообщение
Я хочу увидеть роль параметра nonatimic/ atomic . Вы говорили, что если 2 потока работают и первый обращается к геттеру, а второй это же время обращается к сеттеру одного и того же свойства, то atomic Гарантирует то, что в первый вернется целое неиспорченное значение. Сейчас вроде есть 2 таких потока, но я когда я меняю nonatomic на atomic , метод readString выводит то значение, которое задается в методе writeString. Или я чего-то не понимаю?
Я попробую еще пример выдумать, но имхо, со строками мы ничего не добьемся. Слишком просто. Нужно усложнение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 14:46     ARC и свойства
Еще ссылки по теме:

C++ Как выразить из числа Arc tg
Как выразить из числа Arc tg в градусах C#
Objective-C Видимость свойства
Objective-C Свойства класса
Arcsin(x), arccos(x) и другие arc

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

Или воспользуйтесь поиском по форуму:
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
17.10.2012, 14:46  [ТС]     ARC и свойства #20
Мне подойдёт абсолютно любой пример, где на практике видно разницу между atomic и nonatomic. Заранее благодарю.
Yandex
Объявления
17.10.2012, 14:46     ARC и свойства
Ответ Создать тему
Опции темы

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