Atomare Eigenschaften sind in einer Multi-Thread-Referenzumgebung erforderlich, um zu verhindern, dass Objekte verschwinden, bevor ein Thread sie behalten kann.
Betrachten Sie die naive Implementierung eines Get Accessors:
%Vor%Das ist alles in Ordnung, außer dass, wenn Sie die Instanz von MyObject freigeben, bevor Sie den zurückgegebenen Wert von -myProperty beibehalten, der zurückgegebene Wert möglicherweise freigegeben wird. Aus diesem Grund ist es sicherer, -myproperty wie folgt zu implementieren:
%Vor%Dies ist jetzt völlig sicher in einer Single-Thread-Umgebung.
Leider gibt es in einer Multithread-Umgebung eine Race-Bedingung. Wenn der Thread zu einem beliebigen Zeitpunkt unterbrochen wird, bevor der Retain den Retain-Zähler inkrementiert hat, werden Sie entweder einen der folgenden Punkte erhalten:
Aus diesem Grund müssen alle Zugriffe auf die Eigenschaft durch eine Sperre geschützt sein. Der get-Accessor sieht in etwa so aus.
%Vor%Der Set-Accessor ist in ähnlicher Weise geschützt, ebenso die Freigabe in -dealloc
Die Apple Docs erklären das alles sehr gut. Weitere Informationen zu Eigenschaften, einschließlich ihrer Atomizität, finden Sie auf dieser Seite .
Tags und Links objective-c