iOS und Objective-C: Die meiste CPU-Zeit wird in [NSObject release] und [NSObject retain] verbracht, aber die Klassenmethode führt keine Speicheroperationen aus

8

Eine Bildverarbeitungsanwendung läuft schnell auf dem Simulator, ist aber wirklich langsam auf einem echten Gerät (iPhone 4GS).

Beim Ausführen der Anwendung unter "Instrumente" sehe ich den folgenden Aufrufbaum:

Beachten Sie, dass die Aufrufe innerhalb des roten Kreises fast die gesamte CPU-Zeit der Methode beanspruchen.

Die fragliche Methode ist eine Klassenmethode (keine Instanzmethode) mit dem folgenden Code:

%Vor%

Kann jemand erklären, warum die meiste CPU-Zeit für [NSObject release] und [NSObject retain] ausgegeben wird?

    
Guy 18.03.2013, 04:17
quelle

2 Antworten

3

Wenn es ARC nicht besser kennt, behält ARC alle Argumente für eine Methode und gibt sie beim Beenden der Methode frei (siehe Diese Email-Mail-Liste der objc-Sprache ).

Sie sollten dies vermeiden können, indem Sie die Argumente für +signTested:p1:p2: entweder mit __weak oder __unsafe_unretained annotieren.

    
frozendevil 18.03.2013, 05:19
quelle
1

Nun könnte eine Menge Zeug sein. Wie FrozenDevil sagt, könnte es zu ARC verwandt werden, wenn Sie es verwenden. Ich stelle mir vor, dass die Methode höchstwahrscheinlich unterschiedliche Zeiten innerhalb einer großen Schleife genannt wird. Versuchen Sie, schwache Referenzen zu übergeben, aber natürlich müssen Sie sicher sein, dass sie für den gesamten Prozess existieren. Ich würde auch versuchen, die Schleifeneinbettung jedes Zyklus in einem Autorelease-Pool zu optimieren.

    
Andrea 18.03.2013 07:42
quelle