Ben bu ünlü bellek birikimi sorunu önlemek için yollar tonlarca çalıştı, ama benim uzun uzun yargılanma & hataları göre gelmiş, en iyi ve en basit yolu tüm belleği boşaltmak için KeyboardViewController
arasında viewWillDisappear
yılında exit(0)
çağırmaktır .exit(0)
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
exit(0);
}
[Güncelleme] bu klavye uzatma işlemi öldürür çünkü tüm belleği serbest bırakmak için mükemmeldi. Ne yazık ki, süreci öldürmek iOS'u istikrarsız yapıyor.
Sonuç olarak, en kararlı yol, tüm ayrılmış nesneleri viewWillDisappear
içinde mümkün olduğunca serbest bırakmaktır. Tüm özel görünümler için örneğin,
ve tüm özel görünüm denetleyicileri için
böyle devam subviews, kısıtlamalar, jestler, güçlü delege ve aynı görüş ve bakış kontrolörleri, tüm güçlü içeriği kaldırın. görünüşüdür denetleyicilerinin nesne özellikleri için
[aView removeFromSuperview];
[aView removeConstraints:aView.constraints];
for (UIGestureRecognizer *recognizer in aView.gestureRecognizers)
[aView removeGestureRecognizer:recognizer];
ayarlayın nil
. Diğer büyük özel İçin
aViewController.anObject = nil;
benzeri tüm diziler, sözlükler tüm eklenen nesneleri kaldırın ve nesneleri. imageNamed:
kullanarak
[anArray removeAllObjects];
önbelleğe Al görüntüler.
de serbest, bellek kullanımı ayıklama artış olmaz ise ya da çok az (işten başına < 0.1MBytes) artmıştır. Özel nesneler mümkün olduğunca serbest bırakılsa bile, bir çok görevden alındıktan sonra bellek kullanımı artırılırsa, çıkış (0) belirli bir boşaltma riskiyle periyodik olarak çağrılabilir.
Kodunuzu, tam olarak sorunla karşılaştığınız yere gönderebilir misiniz? – iGW