Сборщик мусора тот же, что и в Mono, исходный код здесь:
https://github.com/mono/mono/tree/master/libgc
Он полностью безопасен для многопоточности и многоядерности, что означает, что несколько потоков могут выделять объекты, и он может собирать мусор при наличии нескольких потоков.
При этом ваш вопрос немного сложен, потому что вы на самом деле не спрашиваете о сборщике мусора, когда говорите, что «поэтому объекты, передаваемые из одного потока в другой, обрабатываются свойством, если есть ограничения, о которых следует знать» .
На самом деле это не вопрос сборщика мусора, а вопрос API. И это сильно зависит от API, который вы вызываете. Правила такие же, как и для .NET: методы экземпляра никогда не являются потокобезопасными, статические методы по умолчанию являются потокобезопасными. Если в API прямо не указано, что это не так.
Теперь с API-интерфейсами пользовательского интерфейса, такими как UIKit или CoreGraphics, они ничем не отличаются от любого другого инструментария графического интерфейса, доступного в мире. Инструментарий пользовательского интерфейса не является потокобезопасным, поэтому вы не можете предположить, что UILabel, созданный в основном потоке, может быть безопасно доступен из потока. Вот почему вы должны вызывать «BeginInvokeOnMainThread» для NSObject, чтобы гарантировать, что любые методы, которые вы вызываете для объектов UIKit, выполняются только без основного потока.
Это просто на примере.
Посетите http://monotouch.net/Documentation/Threading для получения дополнительной информации.
Уведомления о нехватке памяти доставляются операционной системой вашим UIViewControllers, а не сборщику мусора Mono, поэтому в таких случаях вам необходимо предпринять соответствующие действия.
person
miguel.de.icaza
schedule
22.04.2011