Многопоточность и контейнеры данных Objective-C - PullRequest
0 голосов
/ 16 сентября 2010

У меня такой простой вопрос.Я пишу программу Objective-C с многопоточностью.У меня есть глобальный NSArray, и я добавляю объекты в этот NSArray из метода, который вызывается в новом потоке.Если объекты, которые я добавляю в этот NSArray, являются новыми объектами, созданными в этом методе (локально), это создаст доступ к памяти и / или другие проблемы, или сборщик мусора будет достаточно умен, чтобы хранить эти объекты, пока у них больше не будет ссылок?Кроме того, если я хочу добавить объект в этот NSArray, будет ли этот объект передан по ссылке или по значению?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2010
  1. Можете ли вы добавить объекты в NSArray?Я предполагаю, что вы имеете в виду NSMutableArray.
  2. NSMutableArray НЕ является потокобезопасным.Таким образом, вам может потребоваться получить блокировку, прежде чем пытаться ее изменить.Хотя это в основном зависит от того, как ваши потоки работают с общими данными.
  3. NSArray или NSMutableArray сохранят объекты, которые они содержат.Поэтому после добавления вы можете освободить локальную копию.
  4. В массиве будет храниться ссылка.

Надеюсь, это поможет.В общем случае многопоточность намного сложнее, чем однопоточное приложение.Пожалуйста, проверьте Руководство по программированию Threading для деталей.Это может спасти вас от многих опасностей.

0 голосов
/ 16 сентября 2010

Не должно быть проблем с дизайном, который вы описываете.Все ваши потоки имеют одинаковое пространство памяти, поэтому все будет работать нормально.Система управления памятью будет делать «правильные вещи», но я рекомендую изучить метод сохранения / освобождения - нет ничего лучше, чем на самом деле понимание того, что делает ваша программа.

* 1004только передача по значению, точно так же как C. Тем не менее, объекты только когда-либо передаются указателями в Objective-C, так что вы можете думать об этом как о передаче по ссылке в этом смысле.
...