Wenn ich an ARC denke, gibt es keinen Overhead für die Veröffentlichung.
Aber sobald die Core Foundation
Variablen gefunden wurden, müssen sie auch in ARC veröffentlicht werden.
Obwohl die ARC-Regeln sowohl für NS..
als auch für CF..
unterschiedlich sind, gibt es einen bestimmten Grund dafür, CF..
nicht in ARC zu unterstützen?
Wenn ich an ARC denke, gibt es keinen Overhead für die Veröffentlichung.
Ich nehme an, du meinst "Ich muss mir keine Sorgen wegen der Freilassung machen." Es gibt oft einen Leistungsaufwand, obwohl der Compiler es manchmal optimieren kann.
Obwohl die ARC-Regeln sowohl für NS .. als auch für CF .. unterschiedlich sind, gibt es irgendeinen spezifischen Grund, CF in ARC nicht zu unterstützen?
Viele Core Foundation-Objekte werden von ARC verwaltet, und ihre Anzahl nimmt ständig zu. Sie können feststellen, ob eine bestimmte Funktion ARC unterstützt, indem Sie in der Kopfzeile nach CF_IMPLICIT_BRIDGING_ENABLED
suchen. Wenn Sie das sehen, geben die Funktionen ARC-kompatible CF-Objekte zurück. In iOS 8 wurden beispielsweise viele Core Graphics-Funktionen zur Liste hinzugefügt. (Ich möchte das nicht überbewerten; ich sage nicht, dass Sie heute nicht %% %%%%%%%%%%%% an diesen Punkten haben. Ich sage, dass sie von ARC verwaltet werden, sie werden von ARC in Swift verwaltet und sie können eventuell direkt in ObjC behandelt werden, ohne dass CFRelease
benötigt wird.)
Der Grund, warum CF-Objekte nicht standardmäßig verwaltet werden, ist, dass jemand durchgehen und überprüfen (prüfen) muss, dass jede Funktion den Regeln zum Erstellen von Regeln entspricht oder dass sie korrekt mit Anmerkungen versehen sind Ausnahmen. Das ist ziemlich mühsam, und Apple hat es über mehrere Releases verbreitet. Aber Sie sollten sehen, dass dies mit der Zeit immer besser wird.
Kazuki hat Recht, dass Sie ARC-verwaltete Objekte nicht in eine Struktur oder eine Union einfügen können, aber dies wirkt sich normalerweise nicht auf Core Foundation aus.
BTW, CFRelease
ist nur ein Wrapper um das CF_IMPLICIT_BRIDGING_ENABLED
clang Pragma. Dies wird in den ARC-Dokumenten erklärt, 7.8.1 Auditing von C-retainable pointer Schnittstellen .
Core Foundation ist eine reine C-Bibliothek . Daher gibt es zumindest einen Grund, warum ARC das Core Foundation-Objekt nicht direkt unterstützen kann.
4.3.5 Eigner-qualifizierte Felder von Strukturen und Vereinigungen
Ein Programm ist schlecht gebildet, wenn es ein Mitglied einer C-Struktur oder -Union mit einem nicht-trivial Eigentumsrecht-qualifizierten Typ deklariert.
Begründung
Der resultierende Typ würde im C ++ Sinn nicht-POD sein, aber C gibt nicht uns sehr gute Sprachwerkzeuge für das Management der Lebensdauer von Aggregaten, so es ist bequemer, sie einfach zu verbieten. Es ist immer noch möglich Verwalten Sie dies mit einem void * - oder einem __unsafe_unreasted-Objekt.
Daher kann der LLVM-Compiler aufgrund von C does not give us very good language tools for managing the lifetime of aggregates
nicht die Lebensdauer von Core Foundation-Objekten in Strukturen und Unionen sowie diese Erklärung verarbeiten.
Tags und Links objective-c iphone ios automatic-ref-counting