Gegeben ist Folgendes:
%Vor%Wo myTimer in einer privaten Schnittstelle deklariert ist:
%Vor%Wie könnte man die folgende Warnung beheben:
%Vor%Nach dem, was ich bisher gefunden habe, beinhalten die meisten Vorschläge etwas wie:
%Vor% Außer, dass myTimer ein ivar ist, was bedeutet, dass wself
keinen Zugriff auf Eigenschaften hat.
Ich denke, meine Fragen sind:
Ich benutze Ivars ziemlich viel durch meinen Code. Ich habe meinem Projekt nur die -Weverything
-Flag hinzugefügt, um zu sehen, ob ich irgendwelche zugrunde liegenden Probleme finden kann, und dies ist bei weitem die häufigste Warnung. Ich habe kein Problem damit, es zu beheben und es zu beheben, indem ich meine Ivars Eigenschaften mache, aber ich möchte sicherstellen, dass ich ein besseres Verständnis bekomme, bevor ich das tue.
Das Ersetzen von myTimer
by self->myTimer
würde Ihre Warnung beheben.
Wenn Sie einen iVar _iVar
im Code verwenden, ersetzt der Compiler den Code durch self->_iVar
, und wenn Sie ihn innerhalb eines Blocks verwenden, erfasst der Block self anstelle des iVar selbst. Die Warnung soll nur sicherstellen, dass der Entwickler dieses Verhalten versteht.
Xcode: 9.2
Ich habe ein schnelles Projekt. Warnung Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior
erscheint, wenn ich Objective-C-Pods verwende:
%Vor%Fügen Sie am Ende Ihrer Poddatei hinzu:
In letzter Zeit stand ich demselben Problem gegenüber und @Vasily Bodnarchuks Antwort scheint hilfreich zu sein.
In Umgebungen mit kontinuierlicher Integration ist es jedoch nicht möglich, das Flag CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF
zur Laufzeit in NO
zu ändern.
Um das Problem zu isolieren, habe ich versucht, alle von Cocoapods installierten abhängigen GEMS zu überprüfen und herausgefunden, dass die Version 1.5.7 von edge XCODEPROJ die CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF
auf YES
setzt, wann immer der Befehl pod install
ausgeführt wird.
Die Lösung hierfür ist das Zurücksetzen des XCODEPROJ auf frühere Version 1.5.1 durch Ausführen von sudo gem install xcodeproj -v 1.5.1
.
Einmal zurückgesetzt, führe einfach pod install
aus und das Flag wird immer auf NO gesetzt.
Wenn Sie diese Warnungen wegen Bolts
/ FBSDKCoreKit
/ FBSDKLoginKit
erhalten, sollten Sie Vasilys Antwort vermeiden und stattdessen die Warnungen für diese spezifischen Abhängigkeiten stummschalten.
Erwähnen Sie die einzelnen Pods anstatt nur FacebookCore und fügen Sie inhibit_warnings: true
Oder stoppe alle Pods, indem du deinem Podfile folgendes hinzufügst:
%Vor% Sie erhalten immer noch Warnungen für Ihren eigenen Code. Wenn du das nächste Mal den Facebook sdk aktualisierst, sieh dir an, ob du inhibit_warnings: true
oder inhibit_all_warnings!
entfernen kannst.
Tags und Links objective-c macos objective-c-blocks