Warum ist @autoreleasepool Bedarf noch mit ARC?

Zum größten Teil mit ARC (Automatic Reference Counting), die wir nicht brauchen, zu denken, über memory-management mit Objective-C-Objekte. Es ist nicht gestattet, erstellen Sie NSAutoreleasePools mehr, jedoch gibt es eine neue syntax:

@autoreleasepool {
    
}

Meine Frage ist, warum würde ich jemals brauchen, wenn ich nicht beauftragt bin, werden manuell freigeben/autoreleasing ?


EDIT: Um zusammenzufassen, was ich aus all den anwers und Kommentare kurz und bündig:

Neue Syntax:

@autoreleasepool { … } neue syntax für

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

[pool drain];

Noch wichtiger ist:

  • ARC verwendet autorelease sowie release.
  • Braucht es eine auto-release-pool im Ort, dies zu tun.
  • ARC nicht erstellen Sie die auto-release-pool für Sie. Jedoch:
    • Der Haupt-thread eines jeden Cocoa-app hat bereits einen autorelease pool.
  • Es gibt zwei Gelegenheiten, bei denen Sie vielleicht nutzen möchten @autoreleasepool:
    1. Wenn Sie in einem sekundären thread und es gibt keine auto-release-pool, Sie müssen Ihre eigenen zu verhindern, dass Leckagen, wie myRunLoop(…) { @autoreleasepool { … } return success; }.
    2. Wenn Sie möchten, um einen lokalen pool, da @mattjgalloway gezeigt hat in seiner Antwort.

InformationsquelleAutor der Frage mk12 | 2012-01-31

Schreibe einen Kommentar