SlideShare a Scribd company logo
Quản lý bộ nhớ khi
lập trình Apple iOS
     Trịnh Minh Cường
    http://techmaster.vn

                           http://techmaster.vn
Bài trình bày này tập trung vào vấn
đề kỹ thuật trong phát triển native
 app cho Apple iPhone/iPod/iPad.

   Dành riêng cho lập trình viên
                              http://techmaster.vn
Android (Java) – Windows Phone (C#)


 Bộ nhớ được cấp         Không có biến trỏ
                                                         Garbage Collector
phát khi có nhu cầu     đến, hoặc biến đã
                                                         sẽ thu hồi bộ nhớ
      sử dụng           hết hạn trong stack




                 ObjY
    P2
    P1           ObjX




   Stack         Heap   http://www.simple-talk.com/dotnet/.net-
                        framework/understanding-garbage-collection-in-.net/
                                                                  http://techmaster.vn
iOS khác với Android, Windows Phone
• Native iOS app lập trình bằng Objective-C.



          C language       Smalltalk



                 Objective C


                                           http://techmaster.vn
iOS không thu hồi bộ nhớ tự động
          hiện đại như Android hay .NET



                                         Quản lý bộ nhớ khi lập
                                         trình là công việc nhàm
                                           chán nhưng vẫn cần
                                          làm đúng ngay từ đầu


Bít nước rò rỉ tại đập thủy điện sông Gianh               http://techmaster.vn
Pointer – Con trỏ
• Pointer trỏ đến đối tượng. Nó giúp đối tượng
  được giữ lại trong heap.
• Khi đối tượng không còn bất kỳ ai trỏ đến, nó
  cần được loại bỏ để giải phóng bộ nhớ.



            A
                          Object in heap

            B

                                           http://techmaster.vn
• Con trỏ có thể là biến cục bộ trỏ tới đối tượng ở
  heap
• Hoặc nó là thành phần của đối tượng, trỏ đến đối
  tượng khác



                 *p



                Stack          Heap

                                            http://techmaster.vn
[object release]
NSArray *array = [[NSArray alloc] initWithObjects:
@"Honda", @"Yamaha”, nil];
NSLog(@“Retain count: %d", [array retainCount]);
[array release];

                                RetainCount = 1
                      Honda
  array              Yamaha




   Stack             Heap
                                                     http://techmaster.vn
Nếu không release dẫn đến vùng nhớ do
array trước đây trỏ tới trở nên vô chủ. App
vẫn chạy nhưng bộ nhớ bị rò rỉ, leaking.




                                      http://techmaster.vn
Product – Analyze để phân tích kiểm tra




                                  http://techmaster.vn
Product - Profile




                    http://techmaster.vn
LEAK !!!


                                    Thủ phạm gây ra Leak




Nên sử dụng thường xuyên đối với các dự án Non ARC !
                                              http://techmaster.vn
NSArray *array = [[NSArray alloc] initWithObjects:
@"Honda", @"Yamaha”, nil];
[array release];//Cần phải release




UIImage *aImage = [UIImage imageNamed:@”A.png"];
[aImage release]; //Không cần phải release. TẠI SAO?




                                                http://techmaster.vn
[UIImage imageNamed… ] trả về đối tượng
autorelease (tự nhả). Do đó không cần gửi
message release đến đối tượng này nữa.




                                     http://techmaster.vn
[object autorelease]
• Dùng khi tạo một object trong hàm rồi trả
  về qua return.

• [object autorelease] : object sẽ được quản
  lý trong AutoRelease pool

• Lạm dụng autorelease không tốt. Tại sao?


                                      http://techmaster.vn
Kết thúc mỗi chu kỳ xử lý sự kiện, CocoaTouch sẽ
gửi message release đến tất cả các autorelease
object.




                                           http://techmaster.vn
RetainCount = 2


   RetainCount = 0


   RetainCount = 3



   RetainCount = 0


Autorelease pool
                     Heap


                        http://techmaster.vn
[object retain] dùng khi nào?
NSArray *resultArray = [self returnAnArray];

NSArray *anotherArrayPointer = resultArray;




[resultArray release];

[anotherArrayPointer doSomething];

                  Bad memory access !d
                                               http://techmaster.vn
Trước khi chuyển con trỏ đến đối
tượng khác cần release đối tượng cũ


              objX

                     [p release]
*p

              objY

              Heap             http://techmaster.vn
@property

Giúp định nghĩa biến thành phần
tinh tế hơn bằng cách bổ xung
thêm attributes

                             http://techmaster.vn
Attribute                         Ý nghĩa

             Không hỗ trợ truy xuất đồng bộ nhưng sẽ
nonatomic
             nhanh hơn
retain       Tăng ref count của đối tượng thêm 1

             Dành riêng cho kiểu căn bản (primitive data
assign       type), struct hoặc đối tượng nếu không tăng
             ref count
readonly     Chỉ đọc, tạo duy nhất getter

readwrite    Cả đọc ghi. Tạo cả getter và setter

             Copy đối tượng gán sang vùng nhớ mới. Chỉ
copy
             có tác dụng với kiểu MutableXXX   http://techmaster.vn
*p1




Dead Lock in memory



          *p2

                      http://techmaster.vn
• Pointer trong Objective-C mặc định là
  strong
• Cyclic reference gây nên dead lock. Đối
  tượng trong dead lock không thể giải
  phóng, gây thất thoát bộ nhớ
• Cách xử lý, sử dụng __weak


@property (nonatomic, assign)   __weak   A *pA;
                                            http://techmaster.vn
ARC saves you from
mem leak or crash !



      ARC

               http://techmaster.vn
Tính năng quản lý bộ nhớ trong iOS SDK

iOS 1.2               iOS 4.0   iOS 5.0           iOS 5.1       iOS 6.0
                                          5.0.1


3/2008                6/2010    10/2011           3/2012       6/2012



• Trước iOS 5: Manual Retain / Release (Giữ - nhả
  thủ công đối tượng ở heap)

• Sau iOS 5: Automatic Reference Counting (Tự
  động đếm con trỏ trỏ đến đối tượng ở heap)
                                                            http://techmaster.vn
ARC
• LTV không dùng retain, release, autorelease,
  dealloc thủ công nữa.

• Trình biên dịch tự động chèn retain,
  release, autorelease, dealloc khi cần.

• Thêm một số tính năng mới: strong,
  weak


                                       http://techmaster.vn
ARC
• Không phải là cơ chế quản lý bộ nhớ hoàn
  toàn mới
• Không là Garbage Collector như nhiều
  người hiểu nhầm
• Bộ nhớ vẫn có thể thất thoát, ứng dụng đổ
  vỡ nếu dùng sai
• Giải phóng bộ nhớ không tinh tế như JVM
  hay .NET runtime, nhưng rất phù hợp thiết
  bị smartphone                      http://techmaster.vn
strong vs weak
• Mặc định con trỏ là strong

__weak NSString *weakP = textField.text;

      @”Mobile Day              @”Mobile Day
         2011”                     2012”


NIL

         *weakP                textField.text
                                                http://techmaster.vn
Kinh nghiệm
• Dùng strong pointer để giữ đối
  tượng mình tạo ra.

• Không dùng strong pointer để giữ
  đối tượng không thực sự của
  mình  không thể giải phóng bộ
  nhớ. Dùng weak pointer là đủ.
                              http://techmaster.vn
• Gán strong pointer = nil ở hàm viewDidUnload để
  iOS giải phóng đối tượng không cần dùng nữa.
- (void)viewDidUnload
{
   [super viewDidUnload];
   myString = nil;
   myImage = nil;
}

• Không nhất thiết phải dùng strong để trỏ tới
  phần tử giao diện trong XIB.

@property (nonatomic, weak) IBOutlet UIButton *myButton;

                                                http://techmaster.vn
???



      http://techmaster.vn
ARC cần IOS SDK 5.x nhưng hỗ trợ iOS SDK
                   4.x

• LTV bắt buộc phải dùng iOS SDK 5.x để bật ARC
  nhưng có thể chọn deployment target xuống iOS
  4.x.

• Lưu ý iOS 4.x không hỗ trợ automatic weak
  reference zeroing.



                                          http://techmaster.vn
Trên menu của XCode, chọn
Edit -> Refactor -> Convert to Objective-C ARC




                                        http://techmaster.vn
bridge trong ARC
__bridge_transfer: cast đối tượng miền CFObject
sang miền NSObject sau đó release CFObject

__bridge_retained: cast đối tượng miền
NSObject sang CFObject nhưng giữ đối tượng
cũ.

__bridge: chuyển đổi qua lại đối tượng giữa miền
CFObject và NSObject, không quan tâm reference
counter.
                                         http://techmaster.vn
Ứng dụng ARC vẫn có thể xài mã nonARC

• Một số thư viện không dùng ARC như
  ASIHttpRequest, AFNetworking,…




• Làm thế nào để dùng chúng trong dự
  án bật ARC ?

                                    http://techmaster.vn
Bật compiler flags –fno-objc-arc lên !
                                 http://techmaster.vn
Còn nhiều vấn đề nữa…..


• Truy vấn biến trong phạm vi block
• Xử lý khi bộ nhớ dùng cạn
• Lazy Loading
• Quản lý bộ nhớ khi lập trình đồng bộ
• Chuyển đổi vùng nhớ C++ với Objective_C

                                         http://techmaster.vn
Sao phức tạp thế
                 !!!?




Đừng lo lắng, cứ lập trình
đi rồi sẽ quen !
                               http://techmaster.vn
Xin chân thành cảm ơn các bạn đã
          chú ý lắng nghé




                            http://techmaster.vn

More Related Content

PPTX
Vietnam mobile day 2012 i os memory management - techmaster
PPTX
Prototyping giao diện sử dụng Expression Blend Sketch Flow
PPTX
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
PPTX
QUẢN LÍ BỘ NHỚ KHI LẬP TRÌNH APPLE iOS
PPTX
Memory leaking
PPTX
Day0: Giới thiệu lập trình ứng dụng Apple iOS
PDF
Quan ly bo nho trong C#
PDF
Sinh viên CNTT làm gì trong 5 năm tới
Vietnam mobile day 2012 i os memory management - techmaster
Prototyping giao diện sử dụng Expression Blend Sketch Flow
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
QUẢN LÍ BỘ NHỚ KHI LẬP TRÌNH APPLE iOS
Memory leaking
Day0: Giới thiệu lập trình ứng dụng Apple iOS
Quan ly bo nho trong C#
Sinh viên CNTT làm gì trong 5 năm tới

Similar to Apple iOS Memory Management - Vietnamese version (20)

PDF
Noichuyenvoisinhvienbachkhoa 120328052043-phpapp02
PPTX
Các công cụ thường dùng trong xcode
PPTX
IOS OverView
PPTX
Iphone programming
PPTX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
PPT
Danh Sach Lien Ket
PPT
Danhsachlienket -phpapp02
PDF
Hệ điều hành Ptit Công nghệ thông tin2.pdf
PPT
3. Quan ly bo nho.ppt - memory management
PPTX
Group 14_pointer_beta2.pptx
PPT
Bài 1: Giới thiệu Android
PPTX
môn an toàn hệ điều hành bộ nhớ trong.pptx
DOCX
Báo cáo hdh
PDF
Tìm nền tảng lập trình cho 5 năm tới
PDF
C 3. Quản lý bộ nhớ full.pdf
PDF
Android program 6167
PPT
BGKTMT Ch6 mức máy hệ điều hành
PPT
Basic Garbage Collection Techniques [ Vi]
PPTX
Bài thuyết trình môn học Hệ Điều Hành.pptx
DOCX
Quỳnh anh nag luc va no luc cong nghe
Noichuyenvoisinhvienbachkhoa 120328052043-phpapp02
Các công cụ thường dùng trong xcode
IOS OverView
Iphone programming
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Danh Sach Lien Ket
Danhsachlienket -phpapp02
Hệ điều hành Ptit Công nghệ thông tin2.pdf
3. Quan ly bo nho.ppt - memory management
Group 14_pointer_beta2.pptx
Bài 1: Giới thiệu Android
môn an toàn hệ điều hành bộ nhớ trong.pptx
Báo cáo hdh
Tìm nền tảng lập trình cho 5 năm tới
C 3. Quản lý bộ nhớ full.pdf
Android program 6167
BGKTMT Ch6 mức máy hệ điều hành
Basic Garbage Collection Techniques [ Vi]
Bài thuyết trình môn học Hệ Điều Hành.pptx
Quỳnh anh nag luc va no luc cong nghe
Ad

More from TechMaster Vietnam (20)

PDF
Neural Network from Scratch
PPTX
Go micro framework to build microservices
PPTX
Flutter vs React Native 2018
PDF
C đến C++ phần 1
PDF
Control structure in C
PDF
Basic C programming
PDF
Authentication and Authorization
PDF
Postgresql security
PDF
Knex Postgresql Migration
PDF
Postgresql các vấn đề thực tế
PPTX
Arrowjs.io
PPTX
Minimum Viable Products
PPTX
Chia sẻ kinh nghiệm giảng dạy CNTT
PPTX
Cơ sở dữ liệu postgres
PDF
Node.js căn bản
PDF
iOS Master - Detail & TabBar
PDF
Phalcon căn bản
PDF
Cấu hình Postgresql căn bản trong 20 phút
PDF
Phalcon introduction
PPTX
Slide that wins
Neural Network from Scratch
Go micro framework to build microservices
Flutter vs React Native 2018
C đến C++ phần 1
Control structure in C
Basic C programming
Authentication and Authorization
Postgresql security
Knex Postgresql Migration
Postgresql các vấn đề thực tế
Arrowjs.io
Minimum Viable Products
Chia sẻ kinh nghiệm giảng dạy CNTT
Cơ sở dữ liệu postgres
Node.js căn bản
iOS Master - Detail & TabBar
Phalcon căn bản
Cấu hình Postgresql căn bản trong 20 phút
Phalcon introduction
Slide that wins
Ad

Apple iOS Memory Management - Vietnamese version

  • 1. Quản lý bộ nhớ khi lập trình Apple iOS Trịnh Minh Cường http://techmaster.vn http://techmaster.vn
  • 2. Bài trình bày này tập trung vào vấn đề kỹ thuật trong phát triển native app cho Apple iPhone/iPod/iPad. Dành riêng cho lập trình viên http://techmaster.vn
  • 3. Android (Java) – Windows Phone (C#) Bộ nhớ được cấp Không có biến trỏ Garbage Collector phát khi có nhu cầu đến, hoặc biến đã sẽ thu hồi bộ nhớ sử dụng hết hạn trong stack ObjY P2 P1 ObjX Stack Heap http://www.simple-talk.com/dotnet/.net- framework/understanding-garbage-collection-in-.net/ http://techmaster.vn
  • 4. iOS khác với Android, Windows Phone • Native iOS app lập trình bằng Objective-C. C language Smalltalk Objective C http://techmaster.vn
  • 5. iOS không thu hồi bộ nhớ tự động hiện đại như Android hay .NET Quản lý bộ nhớ khi lập trình là công việc nhàm chán nhưng vẫn cần làm đúng ngay từ đầu Bít nước rò rỉ tại đập thủy điện sông Gianh http://techmaster.vn
  • 6. Pointer – Con trỏ • Pointer trỏ đến đối tượng. Nó giúp đối tượng được giữ lại trong heap. • Khi đối tượng không còn bất kỳ ai trỏ đến, nó cần được loại bỏ để giải phóng bộ nhớ. A Object in heap B http://techmaster.vn
  • 7. • Con trỏ có thể là biến cục bộ trỏ tới đối tượng ở heap • Hoặc nó là thành phần của đối tượng, trỏ đến đối tượng khác *p Stack Heap http://techmaster.vn
  • 8. [object release] NSArray *array = [[NSArray alloc] initWithObjects: @"Honda", @"Yamaha”, nil]; NSLog(@“Retain count: %d", [array retainCount]); [array release]; RetainCount = 1 Honda array Yamaha Stack Heap http://techmaster.vn
  • 9. Nếu không release dẫn đến vùng nhớ do array trước đây trỏ tới trở nên vô chủ. App vẫn chạy nhưng bộ nhớ bị rò rỉ, leaking. http://techmaster.vn
  • 10. Product – Analyze để phân tích kiểm tra http://techmaster.vn
  • 11. Product - Profile http://techmaster.vn
  • 12. LEAK !!! Thủ phạm gây ra Leak Nên sử dụng thường xuyên đối với các dự án Non ARC ! http://techmaster.vn
  • 13. NSArray *array = [[NSArray alloc] initWithObjects: @"Honda", @"Yamaha”, nil]; [array release];//Cần phải release UIImage *aImage = [UIImage imageNamed:@”A.png"]; [aImage release]; //Không cần phải release. TẠI SAO? http://techmaster.vn
  • 14. [UIImage imageNamed… ] trả về đối tượng autorelease (tự nhả). Do đó không cần gửi message release đến đối tượng này nữa. http://techmaster.vn
  • 15. [object autorelease] • Dùng khi tạo một object trong hàm rồi trả về qua return. • [object autorelease] : object sẽ được quản lý trong AutoRelease pool • Lạm dụng autorelease không tốt. Tại sao? http://techmaster.vn
  • 16. Kết thúc mỗi chu kỳ xử lý sự kiện, CocoaTouch sẽ gửi message release đến tất cả các autorelease object. http://techmaster.vn
  • 17. RetainCount = 2 RetainCount = 0 RetainCount = 3 RetainCount = 0 Autorelease pool Heap http://techmaster.vn
  • 18. [object retain] dùng khi nào? NSArray *resultArray = [self returnAnArray]; NSArray *anotherArrayPointer = resultArray; [resultArray release]; [anotherArrayPointer doSomething]; Bad memory access !d http://techmaster.vn
  • 19. Trước khi chuyển con trỏ đến đối tượng khác cần release đối tượng cũ objX [p release] *p objY Heap http://techmaster.vn
  • 20. @property Giúp định nghĩa biến thành phần tinh tế hơn bằng cách bổ xung thêm attributes http://techmaster.vn
  • 21. Attribute Ý nghĩa Không hỗ trợ truy xuất đồng bộ nhưng sẽ nonatomic nhanh hơn retain Tăng ref count của đối tượng thêm 1 Dành riêng cho kiểu căn bản (primitive data assign type), struct hoặc đối tượng nếu không tăng ref count readonly Chỉ đọc, tạo duy nhất getter readwrite Cả đọc ghi. Tạo cả getter và setter Copy đối tượng gán sang vùng nhớ mới. Chỉ copy có tác dụng với kiểu MutableXXX http://techmaster.vn
  • 22. *p1 Dead Lock in memory *p2 http://techmaster.vn
  • 23. • Pointer trong Objective-C mặc định là strong • Cyclic reference gây nên dead lock. Đối tượng trong dead lock không thể giải phóng, gây thất thoát bộ nhớ • Cách xử lý, sử dụng __weak @property (nonatomic, assign) __weak A *pA; http://techmaster.vn
  • 24. ARC saves you from mem leak or crash ! ARC http://techmaster.vn
  • 25. Tính năng quản lý bộ nhớ trong iOS SDK iOS 1.2 iOS 4.0 iOS 5.0 iOS 5.1 iOS 6.0 5.0.1 3/2008 6/2010 10/2011 3/2012 6/2012 • Trước iOS 5: Manual Retain / Release (Giữ - nhả thủ công đối tượng ở heap) • Sau iOS 5: Automatic Reference Counting (Tự động đếm con trỏ trỏ đến đối tượng ở heap) http://techmaster.vn
  • 26. ARC • LTV không dùng retain, release, autorelease, dealloc thủ công nữa. • Trình biên dịch tự động chèn retain, release, autorelease, dealloc khi cần. • Thêm một số tính năng mới: strong, weak http://techmaster.vn
  • 27. ARC • Không phải là cơ chế quản lý bộ nhớ hoàn toàn mới • Không là Garbage Collector như nhiều người hiểu nhầm • Bộ nhớ vẫn có thể thất thoát, ứng dụng đổ vỡ nếu dùng sai • Giải phóng bộ nhớ không tinh tế như JVM hay .NET runtime, nhưng rất phù hợp thiết bị smartphone http://techmaster.vn
  • 28. strong vs weak • Mặc định con trỏ là strong __weak NSString *weakP = textField.text; @”Mobile Day @”Mobile Day 2011” 2012” NIL *weakP textField.text http://techmaster.vn
  • 29. Kinh nghiệm • Dùng strong pointer để giữ đối tượng mình tạo ra. • Không dùng strong pointer để giữ đối tượng không thực sự của mình  không thể giải phóng bộ nhớ. Dùng weak pointer là đủ. http://techmaster.vn
  • 30. • Gán strong pointer = nil ở hàm viewDidUnload để iOS giải phóng đối tượng không cần dùng nữa. - (void)viewDidUnload { [super viewDidUnload]; myString = nil; myImage = nil; } • Không nhất thiết phải dùng strong để trỏ tới phần tử giao diện trong XIB. @property (nonatomic, weak) IBOutlet UIButton *myButton; http://techmaster.vn
  • 31. ??? http://techmaster.vn
  • 32. ARC cần IOS SDK 5.x nhưng hỗ trợ iOS SDK 4.x • LTV bắt buộc phải dùng iOS SDK 5.x để bật ARC nhưng có thể chọn deployment target xuống iOS 4.x. • Lưu ý iOS 4.x không hỗ trợ automatic weak reference zeroing. http://techmaster.vn
  • 33. Trên menu của XCode, chọn Edit -> Refactor -> Convert to Objective-C ARC http://techmaster.vn
  • 34. bridge trong ARC __bridge_transfer: cast đối tượng miền CFObject sang miền NSObject sau đó release CFObject __bridge_retained: cast đối tượng miền NSObject sang CFObject nhưng giữ đối tượng cũ. __bridge: chuyển đổi qua lại đối tượng giữa miền CFObject và NSObject, không quan tâm reference counter. http://techmaster.vn
  • 35. Ứng dụng ARC vẫn có thể xài mã nonARC • Một số thư viện không dùng ARC như ASIHttpRequest, AFNetworking,… • Làm thế nào để dùng chúng trong dự án bật ARC ? http://techmaster.vn
  • 36. Bật compiler flags –fno-objc-arc lên ! http://techmaster.vn
  • 37. Còn nhiều vấn đề nữa….. • Truy vấn biến trong phạm vi block • Xử lý khi bộ nhớ dùng cạn • Lazy Loading • Quản lý bộ nhớ khi lập trình đồng bộ • Chuyển đổi vùng nhớ C++ với Objective_C http://techmaster.vn
  • 38. Sao phức tạp thế !!!? Đừng lo lắng, cứ lập trình đi rồi sẽ quen ! http://techmaster.vn
  • 39. Xin chân thành cảm ơn các bạn đã chú ý lắng nghé http://techmaster.vn

Editor's Notes

  • #2: http://stackoverflow.com/questions/6991142/writable-atomic-property-result-cannot-pair-a-synthesized-setter-getter-with-a
  • #5: Objective-C is a thin layer on top of C, and moreover is a strict superset of C; it is possible to compile any C program with an Objective-C compiler, and to freely include C code within an Objective-C class.Objective-C derives its object syntax from Smalltalk. All of the syntax for non-object-oriented operations (including primitive variables, pre-processing, expressions, function declarations, and function calls) are identical to that of C, while the syntax for object-oriented features is an implementation of Smalltalk-style messaging.
  • #16: http://www.asgteach.com/blog/?p=73
  • #17: http://www.asgteach.com/blog/?p=73
  • #33: http://stackoverflow.com/questions/7747783/is-arc-really-supported-in-ios-4-the-ios-4-2-sdk-is-missing-arc-related-symbols