SORU
26 AĞUSTOS 2011, Cuma


Düzeltme uyarı "bu bloğu korumak döngüsü bir " yol açması kaçınılmazdır [nesne] şiddetle Yakalama; ARC özellikli kod

ARC kod etkin, potansiyeli hakkında bir uyarı düzeltmek için nasıl blok-tabanlı bir API kullanırken döngüsü korumak?

Uyarı:
Capturing 'request' strongly in this block is likely to lead to a retain cycle

bu kod parçacığını tarafından üretilen:

ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:...

[request setCompletionBlock:^{
    NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.rawResponseData error:nil];
    // ...
    }];

Uyarı nesne bloğu içinde 5 ** kullanımına bağlı.

CEVAP
26 AĞUSTOS 2011, Cuma


Kendime cevap:

Belgelere anlayışım anahtar kelime block kullanma ve blok içinde kullandıktan sonra sıfıra değişken ayarı Tamam olması gerektiğini söylüyor, ama yine de uyarı gösterir.

__block ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:...

[request setCompletionBlock:^{
    NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.responseData error:nil];
    request = nil;
// ....

    }];

Güncelleme:bu anahtar sözcük '_ . ile çalışmak zorunda ^em>'yerine' . zayıf _block' ve geçici bir değişken kullanarak:

ASIHTTPRequest *_request = [[ASIHTTPRequest alloc] initWithURL:...
__weak ASIHTTPRequest *request = _request;

[request setCompletionBlock:^{
    NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.responseData error:nil];
    // ...
    }];

Ayrıca 9 ** __weak yerine 4 iOS hedeflemek istiyorsanız. Aynı davranış, ancak işaretçi otomatik olarak nesne yok olduğunda sıfıra ayarlanmış yerine asılı kalır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Central

    Android Cent

    13 Kasım 2008
  • audivila

    audivila

    5 HAZİRAN 2009
  • HER0R

    HER0R

    16 Aralık 2007