2011-11-29 20 views
5

Cihazlar (Sızıntı), TWRequest kullanırken bir bellek sızıntısı olduğunu bildiriyor ve gerçekten yanlış yaptığımı göremiyorum. İşte TWRequest ARC dışı projelerde kullanıldığında sızıyor gibi görünüyor

sorunu yeniden oluşturma adımları şunlardır:

(ARC devre dışı), (mesela viewDidLoad) koduna aşağıdaki satırları Heyecan Framework ekleyin ve sonra sadece eklenen yeni Xcode proje oluşturun:

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET]; 

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
    NSLog(@"in performrequest"); 

    [postRequest release]; 
}]; 

Aletleri (sızıntı) ile bu kodu profilleme sonra, "performRequestWithHandler" ile hat sızıntı yaşadığını söylüyor:

Instruments screenshot

Marked line

Bu sızıntıyı önlemek için ne yapılması gerektiğine dair herhangi bir fikir var mı?

Benzer bir soru here buldum ama açıkladığım problemle alakasız görünüyor.

cevap

2

Enstrümanların bunu neden bir sızıntı olarak seçtiğinden emin değilim, ancak isteği tamamlama bloğu dışında bırakabilirsiniz. İstek başlatıldığında, tamamlama bloğu yürütülene kadar bağlantı tarafından tutulur. Kodunuzu aşağıdaki gibi değiştirin:

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET]; 

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
    NSLog(@"in performrequest"); 
}]; 

[postRequest release]; 

Bu, sızıntıyı da ortadan kaldırırsa şaşırmam.