SORU
24 Mart 2011, PERŞEMBE


Arasındaki fark [NSMutableArray dizi] vs [[NSMutableArray alloc] init]

biri bana bir değişken ile bir dizi ilan: farkı söyleyebilir

NSMutableArray *array = [NSMutableArray array];

ve

NSMutableArray *array = [[NSMutableArray alloc] init];

Çünkü başlamıştım ilan benim dizilerle tahsis ve sonunda belli bir işlevi döndüm diziye oluşturulan ayırma, mecbur kaldım autorelease bu dizi, çünkü bellek sızıntısı sorunları.

Şimdi ilk bildirimi kullanarak bir şey serbest bırakmak için ihtiyacım yok.

Teşekkürler

CEVAP
24 Mart 2011, PERŞEMBE


Başlangıçta ayırma ile tüm dizileri ilan olduğum için ve eğer belirli bir fonksiyon sonunda dizinin ayırma ile oluşturulan döndüm bellek sızıntısı sorunları yüzünden bu dizi autorelease zorunda kaldım. Şimdi ilk bildirimi kullanarak bir şey serbest bırakmak için ihtiyacım yok

O "bir nesne. satıcılık zaman tam olarak doğru. Ama diğer durumlarda, ne zaman oluşturduğunuz nesne üzerinde iOS, nerede bir seçim arasında elde bir hazır autoreleased nesne ve arama ayırma ve ardından serbest bırakın, Apple istediği için kullanmak tahsis ve bırakın, çünkü bu tutar ömrü nesne kısa ve denetimi altında.

Buradaki sorun autoreleased nesneleri autorelease havuzda ve havuz ne zaman olursa olsun, süzülmüş, kadar yığını olabilir.

Bir başka şey döngüler. Farkında olmadan autoreleased nesneleri oluşturabilir ve onlar sadece havuza atlasın. Çözüm nesneleri döngüye sokmak her zaman serbest bırakılır, böylece döngü başında kendi autorelease havuzu oluşturmak ve serbest döngü sonunda.

- 12/18/2011 DÜZENLEME:Ama iOS 5 ve gelen ARK, autorelease mekanizması çok daha verimli, ve böyle bir şey yoktur release, o yüzden ayrım arasında ayırma-ınit ve kolaylık yapıcı içecek bir autoreleased nesne olur tartışmalı. (Ayrıca şimdi @autoreleasepool bir blok yerine autorelease yüzme havuzu (sözde)nesne.)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Cartoonium

    Cartoonium

    11 NİSAN 2011
  • Jejoab

    Jejoab

    4 NİSAN 2008