Werden Blöcke unter ARC automatisch kopiert, wenn sie einem Ivar über die Eigenschaft zugewiesen werden?

8

Übernehmen Sie

%Vor%

Ist die Zuordnung zum ivar durch @property korrekt? Ich weiß, dass Sie in der manuellen Speicherverwaltung self.ivarResponseHandler = [responseHandler copy]; benötigt hätten, um sicherzustellen, dass der Block vom Stapel auf den Heap kopiert wurde. Bei Betrachtung von Session 322 - Objective-C Advancements in Depth (Minute 25) von der WWDC 2011 sagt der Sprecher, dass ARC automatisch die Zuweisung eines Blocks zu einem Ivar handhabt. Ich wollte nur sichergehen.

    
bearMountain 02.05.2012, 16:28
quelle

2 Antworten

2

bearMountain,

Der einfachste Weg, um sicherzustellen, dass der Block kopiert wird, besteht darin, den @property auf die Kopie zu setzen. Wie in:

%Vor%

Es tut alles, was Sie brauchen.

Andrew

    
adonoho 04.05.2012, 13:06
quelle
11

ARC wird automatisch die Kopie für Sie in dem von Ihnen geposteten Code ausführen.

Wenn Sie den Block in ein id konvertieren, führt ARC nicht die Kopie für Sie durch. In diesem Code führt ARC beispielsweise die Kopie nicht durch, da der Argumenttyp addObject: id ist:

%Vor%     
rob mayoff 02.05.2012 16:35
quelle