SlideShare ist ein Scribd-Unternehmen logo
1 von 39
http://techmaster.vn
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
phát khi có nhu cầu
sử dụng
Không có biến trỏ
đến, hoặc biến đã
hết hạn trong stack
Garbage Collector
sẽ thu hồi bộ nhớ
P2
ObjY
ObjXP1
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
Objective C
Smalltalk
http://techmaster.vn
iOS không thu hồi bộ nhớ tự động
hiện đại như Android hay .NET
Bít nước rò rỉ tại đập thủy điện sông Gianh
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
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];
array
Honda
Yamaha
Stack Heap
RetainCount = 1
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 !!!
Nên sử dụng thường xuyên đối với các dự án Non ARC !
Thủ phạm gây ra Leak
http://techmaster.vn
UIImage *aImage = [UIImage imageNamed:@”A.png"];
[aImage release]; //Không cần phải release. TẠI SAO?
NSArray *array = [[NSArray alloc] initWithObjects:
@"Honda", @"Yamaha”, nil];
[array release];//Cần phải release
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
Heap
RetainCount = 2
RetainCount = 3
RetainCount = 0
RetainCount = 0
Autorelease pool
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ũ
*p
objX
objY
Heap
[p release]
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
nonatomic
Không hỗ trợ truy xuất đồng bộ nhưng sẽ
nhanh hơn
retain Tăng ref count của đối tượng thêm 1
assign
Dành riêng cho kiểu căn bản (primitive data
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
Copy đối tượng gán sang vùng nhớ mới. Chỉ
có tác dụng với kiểu MutableXXX
http://techmaster.vn
*p1
*p2
Dead Lock in memory
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) A *pA;__weak
http://techmaster.vn
ARC
ARC saves you from
mem leak or crash !
http://techmaster.vn
Tính năng quản lý bộ nhớ trong iOS SDK
• 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)
5.0.1
iOS 1.2
3/2008
iOS 4.0
6/2010
iOS 5.0
10/2011
iOS 5.1
3/2012
iOS 6.0
6/2012
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
@”Mobile Day
2011”
__weak NSString *weakP = textField.text;
@”Mobile Day
2012”
textField.text*weakP
NIL
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.
• Không nhất thiết phải dùng strong để trỏ tới phần
tử giao diện trong XIB.
- (void)viewDidUnload
{
[super viewDidUnload];
myString = nil;
myImage = nil;
}
@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é

Weitere ähnliche Inhalte

Ähnlich wie QUẢN LÍ BỘ NHỚ KHI LẬP TRÌNH APPLE iOS

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ên
Trần Thiên Đại
 
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
 

Ähnlich wie QUẢN LÍ BỘ NHỚ KHI LẬP TRÌNH APPLE iOS (17)

Iphone programming
Iphone programmingIphone programming
Iphone programming
 
Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
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
 
Beezo Share - Donetnuke Deserialize
Beezo Share - Donetnuke DeserializeBeezo Share - Donetnuke Deserialize
Beezo Share - Donetnuke Deserialize
 
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
 
Các công cụ thường dùng trong xcode
Các công cụ thường dùng trong xcodeCác công cụ thường dùng trong xcode
Các công cụ thường dùng trong xcode
 
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ệ
 
Revit API & WPF Training - 15 Lessons | Alpha BIM 2023
Revit API & WPF Training - 15 Lessons | Alpha BIM 2023Revit API & WPF Training - 15 Lessons | Alpha BIM 2023
Revit API & WPF Training - 15 Lessons | Alpha BIM 2023
 
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...
 
Phalcon căn bản
Phalcon căn bảnPhalcon căn bản
Phalcon căn bản
 
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
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
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#
 
Cài đặt Android trên Eclipse
Cài đặt Android trên EclipseCài đặt Android trên Eclipse
Cài đặt Android trên Eclipse
 
Gt java080102005
Gt java080102005Gt java080102005
Gt java080102005
 
giới thiệu về Asp.net core 2.0
giới thiệu về Asp.net core  2.0giới thiệu về Asp.net core  2.0
giới thiệu về Asp.net core 2.0
 
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
 

Mehr von we20

Internet Trends 2014
Internet Trends 2014 Internet Trends 2014
Internet Trends 2014
we20
 
2014 ASIA-PACIFIC DIGITAL OVERVIEW
2014 ASIA-PACIFIC DIGITAL OVERVIEW2014 ASIA-PACIFIC DIGITAL OVERVIEW
2014 ASIA-PACIFIC DIGITAL OVERVIEW
we20
 
2014 internet trends
2014 internet trends2014 internet trends
2014 internet trends
we20
 
VIETNAM E-COMMERCE REPORT 2013
VIETNAM E-COMMERCE REPORT 2013VIETNAM E-COMMERCE REPORT 2013
VIETNAM E-COMMERCE REPORT 2013
we20
 
Báo cáo Thương mại điện tử Việt Nam 2013
Báo cáo Thương mại điện tử Việt Nam 2013Báo cáo Thương mại điện tử Việt Nam 2013
Báo cáo Thương mại điện tử Việt Nam 2013
we20
 
ONLINE PAYMENT ACTUAL SITUATION & POTENTIAL
ONLINE PAYMENT ACTUAL SITUATION & POTENTIALONLINE PAYMENT ACTUAL SITUATION & POTENTIAL
ONLINE PAYMENT ACTUAL SITUATION & POTENTIAL
we20
 
E-COMMERCE IN VN
E-COMMERCE IN VNE-COMMERCE IN VN
E-COMMERCE IN VN
we20
 
Online Mobile Game with Mobicom_eng ver.
Online Mobile Game with Mobicom_eng ver.Online Mobile Game with Mobicom_eng ver.
Online Mobile Game with Mobicom_eng ver.
we20
 
NÓI VỀ TMĐT Ở VN
NÓI VỀ TMĐT Ở VNNÓI VỀ TMĐT Ở VN
NÓI VỀ TMĐT Ở VN
we20
 
MUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAY
MUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAYMUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAY
MUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAY
we20
 
MOBILE APP _VIET VER
MOBILE APP _VIET VERMOBILE APP _VIET VER
MOBILE APP _VIET VER
we20
 
MOBILE APP _ENG VER.
MOBILE APP _ENG VER.MOBILE APP _ENG VER.
MOBILE APP _ENG VER.
we20
 
Phát triển Mobile Application
Phát triển Mobile ApplicationPhát triển Mobile Application
Phát triển Mobile Application
we20
 
Develop Mobile Application
Develop Mobile ApplicationDevelop Mobile Application
Develop Mobile Application
we20
 

Mehr von we20 (20)

Nielsen SEA Cross-platform Report 2014
Nielsen SEA Cross-platform Report 2014Nielsen SEA Cross-platform Report 2014
Nielsen SEA Cross-platform Report 2014
 
Hành vi và xu hướng sử dụng Internet tại Việt Nam
Hành vi và xu hướng sử dụng Internet tại Việt NamHành vi và xu hướng sử dụng Internet tại Việt Nam
Hành vi và xu hướng sử dụng Internet tại Việt Nam
 
Báo Cáo Hành Vi Người Tiêu Dùng Online
Báo Cáo Hành Vi Người Tiêu Dùng OnlineBáo Cáo Hành Vi Người Tiêu Dùng Online
Báo Cáo Hành Vi Người Tiêu Dùng Online
 
Bao cao tai nguyen Internet 2014
Bao cao tai nguyen Internet 2014Bao cao tai nguyen Internet 2014
Bao cao tai nguyen Internet 2014
 
Report on Vietnam Internet resources 2014
Report on Vietnam Internet resources 2014Report on Vietnam Internet resources 2014
Report on Vietnam Internet resources 2014
 
Internet Trends 2014
Internet Trends 2014 Internet Trends 2014
Internet Trends 2014
 
2014 ASIA-PACIFIC DIGITAL OVERVIEW
2014 ASIA-PACIFIC DIGITAL OVERVIEW2014 ASIA-PACIFIC DIGITAL OVERVIEW
2014 ASIA-PACIFIC DIGITAL OVERVIEW
 
2014 internet trends
2014 internet trends2014 internet trends
2014 internet trends
 
Personalized Recommendation - The Key for Engagement?
Personalized Recommendation - The Key for Engagement?Personalized Recommendation - The Key for Engagement?
Personalized Recommendation - The Key for Engagement?
 
VIETNAM E-COMMERCE REPORT 2013
VIETNAM E-COMMERCE REPORT 2013VIETNAM E-COMMERCE REPORT 2013
VIETNAM E-COMMERCE REPORT 2013
 
Báo cáo Thương mại điện tử Việt Nam 2013
Báo cáo Thương mại điện tử Việt Nam 2013Báo cáo Thương mại điện tử Việt Nam 2013
Báo cáo Thương mại điện tử Việt Nam 2013
 
ONLINE PAYMENT ACTUAL SITUATION & POTENTIAL
ONLINE PAYMENT ACTUAL SITUATION & POTENTIALONLINE PAYMENT ACTUAL SITUATION & POTENTIAL
ONLINE PAYMENT ACTUAL SITUATION & POTENTIAL
 
E-COMMERCE IN VN
E-COMMERCE IN VNE-COMMERCE IN VN
E-COMMERCE IN VN
 
Online Mobile Game with Mobicom_eng ver.
Online Mobile Game with Mobicom_eng ver.Online Mobile Game with Mobicom_eng ver.
Online Mobile Game with Mobicom_eng ver.
 
NÓI VỀ TMĐT Ở VN
NÓI VỀ TMĐT Ở VNNÓI VỀ TMĐT Ở VN
NÓI VỀ TMĐT Ở VN
 
MUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAY
MUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAYMUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAY
MUA CHUNG VA KINH NGHIEM PHAT TRIEN SOHAPAY
 
MOBILE APP _VIET VER
MOBILE APP _VIET VERMOBILE APP _VIET VER
MOBILE APP _VIET VER
 
MOBILE APP _ENG VER.
MOBILE APP _ENG VER.MOBILE APP _ENG VER.
MOBILE APP _ENG VER.
 
Phát triển Mobile Application
Phát triển Mobile ApplicationPhát triển Mobile Application
Phát triển Mobile Application
 
Develop Mobile Application
Develop Mobile ApplicationDevelop Mobile Application
Develop Mobile Application
 

QUẢN LÍ BỘ NHỚ KHI LẬP TRÌNH APPLE iOS