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?
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.
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.
Tags und Links objective-c profiling ios memory-management instruments