Ich bin in der Verwendung von Blöcken in Objective-C und habe nicht wirklich eine gute Erklärung dafür gefunden, warum ein Block, wenn Sie es einer Instanzvariablen zuweisen, mit copy
zugewiesen werden muss und nicht assign
?Warum muss die Zuweisung eines Objc-Blocks 'kopieren', nicht 'zuweisen' sein?
zum Beispiel:
typedef void (^MyBlock)();
@interface SomeClass : NSObject
{
MyBlock myblock;
// Other ivars
}
@property (nonatomic, copy) MyBlock myblock; // Why must this be 'copy'???
// other declarations
@end
I.e. Blöcke werden für Geschwindigkeit auf dem Stapel erstellt, und -copy verschiebt sie vom Stapel zum Heap. – bbum