2013-06-09 17 views
9

Uygulamalarımız uygulama mağazasında yayında. Bazı kullanıcıların aldıkları bellek dışı çöküntüleri tanımak isterim. Anladığım kadarıyla% 100'lük bir bellek kazası kaybına tanık olmanın bir yolu yoktur. Bu çökmeleri (oldukça büyük bir olasılıkla), ApplicationDidReceiveMemoryWarning uygulamasında bir mantık yaparak tanımanın bir yolu var mı? (Ben geliştirme süresi boyunca xcode bulma hakkında konuşmuyorum, ben gerçek kullanıcılar bellek kazası dışında tanımak ve dosyaya bir şey kaydeder kodu hakkında konuşuyorum)Bellek yetersizliğini (IOS) tanıma

+0

Kullanım Aletleri (cmd + I), tahsisleri takip eder. – Levi

+0

Teknik bir özellik olsa da, uygulamanızın düşük bellek nedeniyle sonlandırılması gerçekten bir 'kilitlenme' değildir (kullanıcılarınıza benzese de). – occulus

+0

Genel olarak, hayır. Ancak, bellek dışı durumun en olası nedeni, aynı anda bellekte çok fazla görüntü elde edilmesine neden olan UIImage'ın yanlış kullanımıdır. Diğer bir olası neden ise, ViewControler'larda diğer görüntü denetleyicilerinin bir döngüye neden olacak şekilde ref yer alan ref sayım döngüleridir. Sorun şu ki, bu sorunlar genellikle piyasaya sürüldükten sonra ürününüzde görünür ve son kullanıcı cihazlarında çalışır. Sadece çok dikkatli bir geliştirme süreci ve kod incelemeleri bu tür bir sorunu önleyebilir. – MoDJ

cevap

0

Uygulamanızda applicationWillTerminate mesaja dikkat edin temsilci. Uygulama, sistem tarafından sonlandırılırsa (örneğin, düşük bellek nedeniyle), ancak kullanıcının ana anahtara basarak uygulamayı normal şekilde terk etmemesi durumunda çağrılır. Not:, uygulamanız arka planda ise ve bellek tükendiyse, uygulamanız kendisine gönderilen iletiler olmadan öldürülür. Özellikle, iOS'un daha eski sürümlerinde YMMV, yukarıdakilerin doğru olduğundan emin olmak için araştırmaya değer. this blog post'daki görseller oldukça bilgilendiricidir (biraz tarihli olmasına rağmen).

fazla bilgi için, uygulamada üzerinde size kaçaklar sayısını gösterecektir How to know whether app is terminated by user or iOS (after 10min background)

+2

applicationWillTerminate uygulaması, bellek (uygulamada ön planda olduğunda) nedeniyle sonlandırıldığında gerçekleşecek mi? Ayrıca, kullanıcı uygulamayı tamamen kapattığında (arka plana taşınmazsa) çağrılacak mı? – AJ222

-3

Analiz bölümü Öncelikle sizin Xcode üst menü barda Ürüne tıklayarak başvurunuzu Analiz ve tıklayabilir görmek ve can Sızıntıların meydana geldiği yere götürün. Bellek sızıntısını bu şekilde bulabilir ve düzeltebilirsiniz. İkincisi, daha önce çalışmadı, daha sonra çökmenin meydana geldiği görüntü denetleyicisine bakın ve bırakılacak herhangi bir nesneyi bırakıp bırakmadığınızı kontrol edin. Umut, bu, sorununuzu çözmenize yardımcı olabilir.

+2

Bu sorulana farklı bir soru cevapladınız. Hatta kendi deyimiyle “kalkınma döneminde bunu xcode'da bulmaktan bahsetmiyorum” dedi. – occulus

-2

gerçek time.Below 2'de iOS uygulamanın performansını izlemek için kullanılabilir iyi üçüncü parti kütüphaneler de bu tür kategorinin bilinmektedir vardır:

  1. Google Analytics
  2. Crittercism

Onlar izlemek ve kullanıcı cihazlarından kazandığınız raporları hesabınıza gönderebilirsiniz.Ayrıca, düşük bellek nedeniyle meydana gelen kazalar hakkında sizi de bilgilendirirler!

https://developers.google.com/analytics/devguides/collection/ios/

https://www.crittercism.com/

Umut bu bir ölçüde sorununuzu kadar çözebilir.

3

Bana OOM izlemeyi vermek herhangi bir hizmet veya kütüphane ararken, sadece Facebook mühendisliği bu makaleyi bulabiliriz: Fikir uygulaması gerekiyor nedenini anlamak için

https://code.facebook.com/posts/1146930688654547/reducing-fooms-in-the-facebook-ios-app/ Farklı açılardan kontrol edin, (uygulama arka plandaysa, uygulama/OS güncellemesi varsa ...).

Önceki uygulama çıkışını zorlayabilen tüm diğer olası nedenlerin atılması, nedenin bellekte bir arka plan veya bellekte bir ön plan olup olmadığını öğrenebilirsiniz.

Facebook makale prosedürünü uygulayan bir kütüphaneye sahip olmak güzel olurdu. Ancak bugünlerde bulamadım, muhtemelen bunu zorlaştıran veya sdk olarak eklemenin imkansız olduğu için bir sebep var.

Herhangi biri herhangi bir hizmeti bilirse, lütfen yorum veya yeni bir yanıtla birlikte herkesle paylaşın.

Düzenleme: Facebook yayını prosedürünün bir uygulama ile bu GitHub (https://github.com/jflinter/JRFMemoryNoodler) keşfettiler

. Henüz denemedim, ancak bunu denemek için uygulamalarımızda dağıtacağız.

+0

Denemeyi bitirdiniz mi? herhangi bir başarı? – Johanisma

+0

@Johanisma, hayır, uygulamalarımızı bu kütüphaneyle (JRFMemoryNoodler) konuşlandırmaya başlayacağız, ancak inşa etmeden hemen önce onu kaldırmaya karar verdik. Çünkü uygulama çökmesini (geliştirme sırasında) zorladığımız zaman, bu aracın farklı OOM'ları tespit etmemize yardımcı olabileceğinden emin değildik (belki de çökmeleri doğru şekilde yorumlamadık ya da işe yaramadı). Bir şey bulursanız, paylaşın, çünkü hala OOM var. –