Saya mencoba mengambil kembali jumlah memori yang digunakan aplikasi iPhone saya kapan saja, secara terprogram. Ya, saya mengetahui tentang ObjectAlloc / Leaks. Saya tidak tertarik dengan itu, hanya untuk mengetahui apakah mungkin untuk menulis beberapa kode dan mendapatkan jumlah byte yang digunakan dan melaporkannya melalui NSLog.
Terima kasih.
ios
objective-c
iphone
cocoa-touch
memory
Coocoo4Cocoa
sumber
sumber
Jawaban:
Untuk mendapatkan byte sebenarnya dari memori yang digunakan aplikasi Anda, Anda dapat melakukan sesuatu seperti contoh di bawah ini. Namun, Anda benar-benar harus terbiasa dengan berbagai alat pembuatan profil serta mereka dirancang untuk memberi Anda gambaran penggunaan yang jauh lebih baik secara keseluruhan.
Ada juga bidang dalam struktur info.virtual_size yang akan memberi Anda jumlah byte memori virtual yang tersedia (atau memori yang dialokasikan ke aplikasi Anda sebagai memori virtual potensial dalam peristiwa apa pun). Kode yang ditautkan ke pgb akan memberi Anda jumlah memori yang tersedia untuk perangkat dan jenis memorinya.
sumber
Header untuk
TASK_BASIC_INFO
mengatakan:Ini adalah versi yang menggunakan
MACH_TASK_BASIC_INFO
:sumber
Berikut ini report_memory () ditingkatkan untuk menampilkan status kebocoran dengan cepat di NSLog ().
sumber
Ini telah diuji pada Xcode 11 di Mojave 10.4.6 pada 07/01/2019.
Semua jawaban sebelumnya memberikan hasil yang salah .
Berikut adalah cara mendapatkan nilai yang diharapkan yang ditulis oleh Quinn Apple "The Eskimo!".
Ini menggunakan
phys_footprint
var fromDarwin > Mach > task_info
dan sangat cocok dengan nilai dalam pengukur memori di navigator Debug Xcode .Nilai yang dikembalikan dalam byte.
https://forums.developer.apple.com/thread/105088#357415
Kode asli mengikuti.
Memodifikasi ini sedikit untuk membuat kumpulan metode Swift tingkat kelas memungkinkan pengembalian byte aktual dan keluaran yang diformat dengan mudah dalam MB untuk ditampilkan. Saya menggunakan ini sebagai bagian dari rangkaian UITest otomatis untuk mencatat memori yang digunakan sebelum dan setelah beberapa iterasi dari tes yang sama untuk melihat apakah kami memiliki potensi kebocoran atau alokasi yang perlu kami perhatikan.
Nikmati!
Catatan: pembuat kode yang giat mungkin ingin menambahkan pemformat statis ke kelas sehingga
usedMBAsString
hanya mengembalikan 2 tempat desimal yang signifikan.sumber
Solusi cepat dari jawaban Jason Coco :
sumber
Swift 3.1 (Per 8 Agustus 2017)
sumber
(1024*1024)
, bukan dengan1000000
, untuk mendapatkan megabyte dari byte.Inilah Versi Swift 3:
sumber
Versi Objective-C:
sumber
Di bawah ini adalah jawaban yang benar:
``
``
sumber