SlideShare una empresa de Scribd logo
1 de 39
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

Más contenido relacionado

Similar a Mobiledaymemorymanagement 120519033851-phpapp02

ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015IT Expert Club
 
gioi thieu ve java
gioi thieu ve javagioi thieu ve java
gioi thieu ve javaDat Ngo
 
Giới thiệu Nuxt.js
Giới thiệu Nuxt.jsGiới thiệu Nuxt.js
Giới thiệu Nuxt.jsRobin Huy
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệTrần Thiên Đại
 
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng YênGiáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng YênTrần Thiên Đại
 
Khóa học lập trình ios
Khóa học lập trình iosKhóa học lập trình ios
Khóa học lập trình iosĐào tạo Seo
 
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Duy Lê Văn
 
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...Thanh Nguyen
 
Php crawler and parser
Php crawler and parserPhp crawler and parser
Php crawler and parserNgoc Bui Dinh
 
Cấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong CCấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong CIam Me
 
Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Văn Dũng
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...VKhang Yang
 
BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019
BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019
BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019TiLiu5
 
Sử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHPSử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHPAiTi Education
 
7. xu ly bat dong bo
7. xu ly bat dong bo7. xu ly bat dong bo
7. xu ly bat dong boJustin Hoang
 

Similar a Mobiledaymemorymanagement 120519033851-phpapp02 (20)

Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
 
Gioi thieu ve_java
Gioi thieu ve_javaGioi thieu ve_java
Gioi thieu ve_java
 
gioi thieu ve java
gioi thieu ve javagioi thieu ve java
gioi thieu ve java
 
Node.js căn bản
Node.js căn bảnNode.js căn bản
Node.js căn bản
 
Apache+ q logs
Apache+ q logsApache+ q logs
Apache+ q logs
 
Giới thiệu Nuxt.js
Giới thiệu Nuxt.jsGiới thiệu Nuxt.js
Giới thiệu Nuxt.js
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất Nghệ
 
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng YênGiáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
 
Gt java080102005
Gt java080102005Gt java080102005
Gt java080102005
 
Khóa học lập trình ios
Khóa học lập trình iosKhóa học lập trình ios
Khóa học lập trình ios
 
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)
 
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
VMD2017 - Sử dụng React Native cho môi trường Production: khả thi đến đâu? kh...
 
Php crawler and parser
Php crawler and parserPhp crawler and parser
Php crawler and parser
 
Cấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong CCấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong C
 
Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
 
BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019
BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019
BÀI THÍ NGHIỆM SỐ XÂY DỰNG HIBERNATE CHO ỨNG DỤNG JAVA_10441312092019
 
Sử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHPSử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHP
 
7. xu ly bat dong bo
7. xu ly bat dong bo7. xu ly bat dong bo
7. xu ly bat dong bo
 

Mobiledaymemorymanagement 120519033851-phpapp02

  • 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

Notas del editor

  1. http://stackoverflow.com/questions/6991142/writable-atomic-property-result-cannot-pair-a-synthesized-setter-getter-with-a
  2. 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.
  3. http://www.asgteach.com/blog/?p=73
  4. http://www.asgteach.com/blog/?p=73
  5. http://stackoverflow.com/questions/7747783/is-arc-really-supported-in-ios-4-the-ios-4-2-sdk-is-missing-arc-related-symbols