Ich versuche nur, meine übliche Datenübertragung durchzuführen. Ich definiere meine NSMutableURLRequest und rufe dann auf
[[NSURLConnection alloc] initWithRequest:request delegate:self];
Früher war dies mit Xcode 3 in Ordnung, aber Xcode 4 warnt mich vor " Ausdrucksergebnis nicht verwendet " in dieser Zeile. Die Anfrage funktioniert, aber ich möchte einen Weg finden, um die Warnung loszuwerden.
Ich nehme an, ich könnte die Verbindung in einer Variablen speichern, aber ich brauche sie nicht wirklich und ich kann nicht sehen, wo ich sie in nil
die nächste Zeile setzen soll (obwohl dies die Warnung entfernen würde)
Bitte beachten Sie: Ich bin nicht 100% sicher, ob es sich um Xcode 4 handelt oder ob ARC aktiviert ist.
#if SHOW_DEBUG_LOG # define DEBUG_LOG(x,...) NSLog(@"Debug Log: "x, __VA_ARGS__) #else # define DEBUG_LOG(x,...) (void)(x); do { (void)(__VA_ARGS__); } while (0) #endif
Die Antwort vonprogrmr ist richtig, aber hier ist eine noch sauberere Methode:
[NSURLConnection connectionWithRequest:request delegate:self];
Dies verursacht keine Warnung, auch wenn Sie das Ergebnis nicht für ungültig erklären.
quelle
Jemand sollte dafür verantwortlich sein
NSURLConnection
. Es wird nicht benötigt, um die Verbindung zu speichern, aber es ist besser, wenn Sie dies tun. Das Problem ist, dass nach Ihrer ErstellungNSURLConnection
niemand einen Zeiger auf die erstellte Instanz hat, was nicht der Fall sein sollte.Nehmen wir folgendes Beispiel an:
ClassA
erstellt ein Instane vonNSURLConnection
ClassA
wird freigegeben und freigegebenNSURLConnection
ist noch am Leben und wird den Delegaten an Ihre freigegebene Instanz entlassen.Um dieses Problem zu lösen, sollten Sie die Instanz von speichern
NSURLConnection
und diese Verbindung freigeben, wenn Ihre InstanzClassA
freigegeben wird, was dazu führt, dass auch die Instanz von freigegeben wirdNSURLConnection
.quelle
NSURLConnection
kennt Ihre Instanz von,ClassA
aber niemand kennt Ihre Instanz. Es gibt eine Beziehung zwischen beiden Instanzen und diese Beziehung muss verwaltet werden;) Wenn Sie den Zeiger jedoch nicht speichern,NSURLConnection
hat niemand einen Zeiger darauf und ARC gibt die Verbindung sofort oder nie frei. Wenn Sie den resultierenden Zeiger speichern, wird die Warnung nicht angezeigt und Sie haben ein besseres Codierungsdesign und können dann zuverlässigeren Code schreiben:connection:(NSURLConnection*)con didSth{if(con != self.curCon) return;}