/ / Differenz: Erstellen Sie Instanzen mit Klassenmethoden oder indem Sie ihnen Rückgabewerte zuweisen - objective-c, class-method

Unterschied: Erstellen Sie Instanzen mit Klassenmethoden oder indem Sie ihnen Rückgabewerte zuweisen - objective-c, class-method

nur eine kleine Frage mit einer einfachen und kurzen Antwort hoffe ich ;-)

Was genau ist der Unterschied zwischen (d. H.)

NSData *htmlData = [NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil];

und

NSData *htmlData = [NSData dataWithData:[NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil]]

Oder gibt es überhaupt keinen Unterschied? Wenn es darauf ankommt, ja, ich benutze ARC.

Danke vielmals!

Antworten:

2 für die Antwort № 1

Es gibt keine einfache und kurze Antwort :)

In der ersten behandeln Sie die Daten, die von der URL-Verbindung zurückgegeben werden.

In der zweiten, erstellen Sie eine Kopie dieser Daten - die "kopieren" BTW, möglicherweise nicht eine tiefe Kopie für eine Reihe von Gründen.

Wie das funktioniert, kann tatsächlich gehen beide Wegeund vieles davon ist schwer zu beantworten, weil:

  • a) Es hängt weitgehend davon ab, wie Ihr Programm diese Daten verwendet und
  • b) interne Optimierungen und Implementierungsdetails der APIs, die Sie verwenden
  • c) kopieren oder behalten Sie die Semantik Ihrer Objekte

Persönlich bevorzuge ich Letzteres, wenn ich diese Daten weitergeben muss. Der Grund ist, dass Sie Ihre Ivars für Typen mit veränderbaren Varianten als Kopie deklarieren sollten (NSMutableData in diesem Fall), und Sie sollten im Allgemeinen mit arbeitenunveränderliche Kopien dieser Objekte, wo immer möglich. Sobald viele Ihrer Implementierungen diese Typen mit veränderbaren Varianten durch Kopieren behandeln, können Sie dies tatsächlich tun reduzieren Kopieren, indem sichergestellt wird, dass die Objekte, mit denen Sie arbeiten, tatsächlich unveränderlich sind - unveränderliche Objekte können tiefe und sogar flache Kopien vermeiden, wenn eine Kopie angefordert wird.

Wenn diese Daten nirgendwo anders übergeben werden, könnten Sie eine potenzielle Kopie vermeiden, falls die API eine Instanz von NSMutableData (d. h. Sie können das erste sicher verwenden).