LLVM / Clang Fehler in bequeme Methode und NSClassFromString (...) alloc / release gefunden
-
27-09-2019 - |
Frage
Ich Analyse Objective-C iPhone-Projekt mit LLVM / Clang statische Analyzer. Ich erhalte zwei gemeldete Fehler, aber ich bin mir ziemlich sicher, dass der Code korrekt ist.
1) Methode.
+ (UILabel *)simpleLabel
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 10, 200, 25)];
label.adjustsFontSizeToFitWidth = YES;
[label autorelease]; // Object with +0 retain counts returned to caller where a +1 (owning) retain count is expected.
return label;
}
2) [NSClassFromString (...) alloc] kehrt retainCount + 1. Bin ich richtig?
Class detailsViewControllerClass =
NSClassFromString(self.detailsViewControllerName);
UIViewController *detailsViewController =
[[detailsViewControllerClass alloc]
performSelector:@selector(initWithAdditive:) withObject:additive];
[self.parentController.navigationController
pushViewController:detailsViewController animated:YES];
[detailsViewController release]; // Incorrect decrement of the reference count of an object is not owned...
Sind diese einige Probleme Clang oder ich bin völlig falsch in diesen beiden Fällen?
Lösung
korrigieren Ihr Code sieht in beiden Fällen. Für nicht. 2, Sie sind verwirrend wahrscheinlich den Analysator von performSelector
anstelle von einfachen initWithAdditive
mit (gibt es einen bestimmten Grund, warum Sie einen Selektor verwenden?). Ich bin über keine nicht sicher. 1, aber vielleicht versuchen Sie es mit [[[UILabel alloc] init...] autorelease]
Initialisierung statt separat von autoreleasing, und sehen, ob das Problem weiterhin besteht.