Memutus Siklus Retain dalam Block
Diagnosis dan perbaiki kebocoran memori ARC yang paling umum dalam aplikasi lama: siklus retain akibat block menangkap self, menggunakan referensi weak dan strong.
Memutus Siklus Retain dalam Block adalah pelajaran Objective-C iOS Development for Legacy & Enterprise Apps gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Objective-C iOS Development for Legacy & Enterprise Apps, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Objective-C iOS Development for Legacy & Enterprise Apps mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
What is a Retain Cycle?
A retain cycle happens when two objects strongly reference each other. Neither's count can reach zero, so neither is ever freed — a memory leak ARC cannot break for you.
Blocks Capture Strongly
An Objective-C block captures the variables it uses, including self — and it captures them strongly by default. This is the number one source of cycles.
A Cycle in Action
Here self owns the block (stored in a property), and the block strongly captures self. That mutual ownership leaks.
self.completion = ^{
[self refreshUI];
};The weak Qualifier
Break the cycle by capturing a weak reference to self. A weak reference does not increase the retain count.
__weak typeof(self) weakSelf = self;
self.completion = ^{
[weakSelf refreshUI];
};The weakSelf Pattern
The convention names the capture weakSelf using __weak typeof(self) so the type stays correct even if the class changes.
__weak typeof(self) weakSelf = self;weakSelf Can Become nil
A weak reference becomes nil the instant the object deallocates. If the block runs after that, messages to weakSelf are silently ignored — but partial access can be inconsistent.
The strongSelf Guard
Inside the block, promote weakSelf to a temporary strong reference so it cannot vanish mid-execution.
self.completion = ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf refreshUI];
}
};When You Do NOT Need weakSelf
Not every block leaks. If self does not own the block — for example a one-shot block passed to a method and not stored — capturing self strongly is fine and even safer.
[UIView animateWithDuration:0.3 animations:^{
self.view.alpha = 0;
}];Delegate Cycles
The same rule applies to delegates: a delegate property should be weak so a view controller and its child do not retain each other.
@property (nonatomic, weak) id<MyDelegate> delegate;Finding Leaks
Tools to hunt cycles:
- Instruments > Leaks flags leaked allocations
- Memory Graph Debugger in Xcode visualizes retain cycles
- Log in
deallocto confirm objects are freed
Rule of Thumb
Ask: does self own this block, and does the block touch self? If both are yes, use weakSelf (plus a strongSelf guard for multi-step work).
Quick Check
Test your retain cycle knowledge.
Recap
You learned to break retain cycles:
- Blocks capture
selfstrongly by default - A cycle leaks when self owns a block that references self
- Use
__weak typeof(self) weakSelfto break it - Add a
strongSelfguard for multi-step work - Mark delegate properties
weak
Instruments and the Memory Graph confirm your fixes.
Belajar Objective-C dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Memutus Siklus Retain dalam Block” gratis?
Ya — teks lengkap “Memutus Siklus Retain dalam Block” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Objective-C iOS Development for Legacy & Enterprise Apps, upgrade ke CoddyKit PRO. Kursus Objective-C iOS Development for Legacy & Enterprise Apps mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Memutus Siklus Retain dalam Block”?
Diagnosis dan perbaiki kebocoran memori ARC yang paling umum dalam aplikasi lama: siklus retain akibat block menangkap self, menggunakan referensi weak dan strong. Kamu berlatih Objective-C iOS Development for Legacy & Enterprise Apps dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Objective-C iOS Development for Legacy & Enterprise Apps?
Tidak diperlukan pengalaman sebelumnya. Objective-C iOS Development for Legacy & Enterprise Apps di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Memutus Siklus Retain dalam Block” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Objective-C iOS Development for Legacy & Enterprise Apps ini?
Ya. Setiap pelajaran Objective-C iOS Development for Legacy & Enterprise Apps menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar Retain-Release Manual (MRR)
- Penghitungan Referensi Otomatis (ARC)
- Referensi Lemah vs. Kuat
- Memutus Siklus Retain dalam Block