Objective C'de bir özel sınıf oluşturulduğunda, dealloc
yöntemi ne zaman ve nasıl çağrılır? Sınıfımda bir şekilde uygulamak zorunda olduğum bir şey mi?Dealloc yöntemini ve Objective C'yi ne zaman çağırır?
cevap
Doğrudan bir redaksiyon iletisi göndermezsiniz. Bunun yerine, bir nesnenin dealloc yöntemi, serbest bırakma NSObject protokolü yöntemiyle dolaylı olarak çağrılır (bırakma mesajı alıcının tutma sayısının 0 olmasına neden olursa). Bu yöntemlerin kullanımı hakkında daha fazla bilgi için bkz. Bellek Yönetimi Programlama Kılavuzu.
Alt sınıflar, nesne tarafından tüketilen herhangi bir ek belleğin serbest bırakılmasına izin vermek için kendi ayrılan sürüme geçirme nesnesinin sahip olduğu veri veya nesne örneği değişkenleri için dinamik olarak ayrılmış depolama alanı gibi, kendi dlllloc sürümlerini uygulamalıdır. sınıf özgü miktarda kaldırma yaptıktan sonra, alt sınıf yöntemi süper bir mesaj yoluyla dealloc üst sınıf versiyonlarını içermelidir:
Önemli: Bir uygulama iptal edildiğinde işlemin bellek olduğundan, nesneler bir dealloc mesajı gönderilebilir unutmayın çıkışta otomatik olarak temizlenir - işletim sisteminin tüm kaynakları yönetim yöntemlerini çağırmaktan daha verimli olmasını sağlamak için daha etkilidir. Bu ve diğer nedenlerle, memory management sonucunda denir dealloc
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc];
}
}
Nesne artık gerekmediğinde çalışma zamanı bunu sizin için yapacaktır (çalışma zamanı da karar verir). Sadece düzgün şekilde sakladığınızdan ve bıraktığınızdan emin olun. Diğer nesnelerde dealloc çağırmayın.
dealloc
kıt kaynaklarını yönetmek olmamalıdır. Bir nesne "retainCount" 0'a ulaştığında, o nesneye otomatik olarak bir dealloc mesajı gönderilir.
Geçersiz kılınmış bir dealloc sonunda [super dealloc];
numaralı çağrı olmadıkça, nesneler üzerinde dealloc'u hiçbir zaman aramamalısınız. -[NSObject dealloc] discussion
göre
-(void)dealloc { [ivar release]; //Release any retained variables before super dealloc [super dealloc]; //Only place in your code you should ever call dealloc }
Ve
Doğrudan bir dealloc mesaj göndermez. Bunun yerine, bir nesnenin dealloc yöntemi, NSObject protokol yöntemiyle dolaylı olarak çağrılır (serbest bırakma mesajı alıcının tutma sayısının 0 olmasını sağlar). Bu yöntemlerin kullanımı hakkında için Memory Management Programming Guide'a bakın.
-release
böyle NSObject uygulanan düşünün:
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc]
}
}
Ben biraz daha karışık eminim, ancak sorunun cevabı nesnesinin kendisi -dealloc
zaman arayacak olmasıdır Onun korunma sayısı sıfıra düşer. Ancak, özel sınıfınız bu davranışı NSObject'ten devralır. Asla, yazmakta olduğunuz kodda kendinizi aramak zorunda kalmazsınız; Nesne düzgün bir şekilde serbest bırakıldığında her zaman otomatik olarak gerçekleşir.
- 1. Özel dealloc ve ARC (Objective-C)
- 2. objektif-c sınıfı değişkenler: dealloc ne zaman çağrılır?
- 3. initWithCoder: yöntemini ne zaman kullanırım?
- 4. Objective-C 'kendini' ne zaman kullanılır
- 5. Objective-C yöntem adlarında "ve" ne zaman kullanmalıyım?
- 6. SwitchPreferences birden çok kez onPreferenceChange() yöntemini çağırır
- 7. ReactJS bileşenleri ne zaman AJAX çağrılarını durumdan güncelleştirmek için çağırır?
- 8. [self release], [self dealloc] veya [super dealloc]?
- 9. Çağrılar yöntemini çağırır, bu çağrı, kamu int'yi etkilemez
- 10. Bir C# derleyicisi bir async yöntemini ne zaman keseceğini biliyor?
- 11. Ne zaman & neden @interface ClassName (Private) kullanıyorsunuz? - Objective-C
- 12. Uygulama arka plana ne zaman gidilir?
- 13. OpenGLES 2 - glBindTexture ne zaman ve ne zaman glActiveTexture?
- 14. Ne zaman assert() kullanılmalı ve ne zaman kullanılmalı?
- 15. Gen_Fsm ne zaman kullanılır ve Gen_Server ne zaman kullanılır?
- 16. GörünümWillAppear ve ne zaman viewDidLoad içine koymak ne zaman?
- 17. Ne zaman kullanılmalı ve Aurelia'da ne zaman kullanılır?
- 18. Vektörler ne zaman kullanılır ve C++ dizini ne zaman kullanılır?
- 19. undef_method ne zaman kullanılır ve remove_method ne zaman kullanılır?
- 20. Eklentiler ne zaman seçilecek ve ne zaman ipucu seçileceği
- 21. Bir kullanıcı ne zaman ve ne zaman bir Facebook paylaştı
- 22. Oluşturduğunuzda ve djangorestframework serializer'da ne zaman güncellendiniz?
- 23. HttpPostedFile.InputStream - ve ne zaman kullanılmalıdır?
- 24. recyclerView.setHasFixedSize ne zaman kullanılır?
- 25. Save: yönteminin ne zaman kullanılır: NSManagedObjectContext
- 26. [myVar dealloc] ve [myVar release] arasındaki farkı en iyi ne açıklar?
- 27. dealloc içinde dispatch_async güvenli midir?
- 28. Dealloc bir denetleyici uyarısı uyarısı
- 29. Rotasyonun ne zaman setRequestedOrientation
- 30. JMS AUTO_ACKNOWLEDGE ne zaman onaylandı?
Umarım bu yöntem gövdesi 'tutulması' yerine 'yayın' yerine ' – Saran
@saran'tır, kesinlikle haklısınız. Aptal hatam; Onu yakaladığın için teşekkürler. – Caleb
Gerçekten güzel cevap.Yukarıda bir cevap ver ama cevabın pratikte en iyi olduğunu düşünüyorum. – PJR