Block behält implizit "self" bei; Erwähnen Sie explizit "selbst", um anzuzeigen, dass dies beabsichtigt ist

Angesichts der folgenden:

- (void) someMethod
{
    dispatch_async(dispatch_get_main_queue(), ^{
        myTimer = [NSTimer scheduledTimerWithTimeInterval: 60
                                                           target: self
                                                         selector: @selector(doSomething)
                                                         userInfo: nil
                                                          repeats: NO];
    });
}

Wo myTimer deklariert ist, in eine private Schnittstelle:

@interface MyClass()
{
    NSTimer * myTimer;
}
@end

Wie würde man die folgende Warnung:

Block implizit behält 'self'; explizit erwähnt, "selbst", um anzuzeigen, das ist das beabsichtigte Verhalten

Von dem, was ich bis jetzt gefunden habe, sind die meisten Vorschläge beinhalten Sie, so etwas wie:

- (void) someMethod
{
    __typeof__(self) __weak wself = self;
    dispatch_async(dispatch_get_main_queue(), ^{
        wself.myTimer = [NSTimer scheduledTimerWithTimeInterval: 60
                                                           target: self
                                                         selector: @selector(doSomething)
                                                         userInfo: nil
                                                          repeats: NO];
    });
}

Außer, dass myTimer ist ein ivar, Bedeutung wself nicht haben Zugriff auf alle Eigenschaften.

Ich denke, meine Fragen sind:

  1. Tun/sollte mich das interessieren?
  2. Sollte ich erklären myTimer als Eigenschaft?

Benutze ich ivars einiges durch meinen code. Ich habe gerade die -Weverything Flagge, um mein Projekt um zu sehen, ob ich finden kann, alle zugrunde liegenden Probleme, und dies ist bei weitem die häufigste Warnung. Ich habe kein problem, geht aber und es zu beheben, indem Sie meine ivars Eigenschaften, aber ich möchte sicherstellen, dass ich ein besseres Verständnis, bevor ich das tun.

InformationsquelleAutor der Frage Kyle | 2014-02-05

Schreibe einen Kommentar