Tải bản đầy đủ (.pdf) (64 trang)

Tìm hiểu và xây dựng ứng dụng nhật ký bé yêu trên hệ điều hành ios

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.1 MB, 64 trang )

ĐẠI HỌC ĐÀ NẴNG
ĐẠI HỌC SƢ PHẠM ĐÀ NẴNG
KHOA TIN HỌC

LUẬN VĂN TỐT NGHIỆP
NGÀNH CỬ NHÂN CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI:

TÌM HIỂU VÀ XÂY DỰNG ỨNG DỤNG NHẬT
KÝ BÉ YÊU TRÊN HỆ ĐIỀU HÀNH iOS

GVHD

: ThS. Nguyễn Thanh Tuấn

SVTH

: Nguyễn Thị Ly

LỚP

: 10CNTT1

Đà Nẵng, Ngày 7 tháng 5 năm 2014


MỤC LỤC
MỞ ĐẦU .................................................................................................................... 1
CHƢƠNG 1. CƠ SỞ LÝ THUYẾT ......................................................................... 4
1.1. CƠ BẢN VỀ NGƠN NGỮ LẬP TRÌNH OBJECTIVE-C .............................. 4
1.1.1. Giới thiệu .................................................................................................... 4


1.1.2. Một số từ khóa thông dụng......................................................................... 4
1.1.3. Khai báo Class ............................................................................................ 5
1.1.4. Properties .................................................................................................... 6
1.1.5. Category và Protocol .................................................................................. 7
1.1.6. Kế thừa ....................................................................................................... 8
1.1.7. Quản lý bộ nhớ trong Objective-C ............................................................. 9
1.1.8. Các đối tƣợng cơ bản trong Objective-C ................................................. 13
1.2. HỆ ĐIỀU HÀNH iOS ..................................................................................... 16
1.2.1. Giới thiệu .................................................................................................. 16
1.2.2. Kiến trúc ................................................................................................... 16
1.2.3. Giới thiệu một số UI Elements ................................................................. 19
1.2.4. Storyboards ............................................................................................... 22
1.2.5. Core Data .................................................................................................. 22
1.2.6. Camera và Photo Library ......................................................................... 23
1.2.7. Audio và Video. ....................................................................................... 24
1.3. KẾT CHƢƠNG .............................................................................................. 25
CHƢƠNG 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG ................................... 26
2.1. Ý TƢỞNG ...................................................................................................... 26
2.2. ĐẶC TẢ CHỨC NĂNG ................................................................................. 28
2.3. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG .................................................... 30
2.4. THIẾT KẾ CƠ SỞ DỮ LIỆU ......................................................................... 37
2.5. KẾT CHƢƠNG .............................................................................................. 43


CHƢƠNG 3. MỘT SỐ KẾT QUẢ DEMO CỦA ỨNG DỤNG .......................... 44
3.1. CHỨC NĂNG NHẬT KÝ.............................................................................. 45
3.2. CHỨC NĂNG QUẢN LÝ.............................................................................. 49
3.3. CHỨC NĂNG GHI CHÚ SỰ KIỆN .............................................................. 52
3.4. CHỨC NĂNG CUNG CẤP KIẾN THỨC NUÔI DẠY TRẺ ....................... 53
3.5. KẾT CHƢƠNG .............................................................................................. 54

KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN ............................................................. 55
TÀI LIỆU THAM KHẢO ...................................................................................... 57


MỤC LỤC HÌNH ẢNH
Hình 1.1. Sơ đồ quản lý bộ nhớ trong Objective-C ................................................ 10
Hình 1.2. Sơ đồ kiến trúc iOS ................................................................................. 17
Hình 1.3. UITextField ............................................................................................. 19
Hình 1.4. UIAlertView ............................................................................................ 20
Hình 1.5. UISlider ................................................................................................... 21
Hình 1.6. UITableView ........................................................................................... 21
Hình 1.7. Storyboards ............................................................................................. 22
Hình 1.8. Core Data ................................................................................................ 23
Hình 2.1. Sơ đồ XMind ........................................................................................... 27
Hình 2.2. Sơ đồ chức năng ...................................................................................... 28
Hình 2.3. Sơ đồ User Case ...................................................................................... 30
Hình 2.4. Sơ đồ phân rã chức năng ......................................................................... 32
Hình 2.5. Sơ đồ ngữ cảnh ........................................................................................ 32
Hình 2.6. Sơ đồ luồng dữ liệu mức đỉnh ................................................................. 33
Hình 2.7. Sơ đồ luồng dữ liệu chức năng nhật ký ................................................... 34
Hình 2.8. Sơ đồ luồng dữ liệu chức năng quản lý ................................................... 34
Hình 2.9. Sơ đồ luồng dữ liệu chức năng ghi chú sự kiện ...................................... 35
Hình 2.10. Sơ đồ luồng dữ liệu chức năng cung cấp kiến thức ni dạy trẻ ............ 35
Hình 2.11. Sơ đồ liên kết thực thể............................................................................. 36
Hình 2.12. Sơ đồ Class Diagram ............................................................................... 42
Hình 3.1. Giao diện chính chức năng nhật ký ......................................................... 45
Hình 3.2. Giao diện xem chi tiết một sự kiện nhật ký ............................................ 46
Hình 3.3. Giao diện xem chi tiết một hình ảnh trong nhật ký................................. 47
Hình 3.4. Chia sẻ qua Email, Facebook, Twitter.. .................................................. 48
Hình 3.5. Giao diện lựa chọn chức năng ................................................................. 49

Hình 3.6. Giao diện hiển thị thông tin cơ bản về bé ............................................... 50
Hình 3.7. Giao diện hiển thị thơng tin phát triển của bé ......................................... 51
Hình 3.8. Giao diện hiển thị danh sách các sự kiện tiếp theo về bé........................ 52
Hình 3.9. Giao diện hiển thị kiến thức nuôi dạy trẻ ................................................ 53


DANH MỤC BẢNG BIỂU
Bảng 1.1. Các định dạng ảnh hỗ trợ trên iOS ......................................................... 20
Bảng 2.1. Mô tả Actor ............................................................................................. 30
Bảng 2.2. Mô tả User Case...................................................................................... 30
Bảng 2.3. Bảng dữ liệu INFO ................................................................................. 37
Bảng 2.4. Bảng dữ liệu DIARY .............................................................................. 37
Bảng 2.5. Bảng dữ liệu ALBUM ............................................................................ 38
Bảng 2.6. Bảng dữ liệu BABY................................................................................ 38
Bảng 2.7. Bảng dữ liệu GROWBABY ................................................................... 38
Bảng 2.8. Bảng dữ liệu STANDARDBOY ............................................................ 39
Bảng 2.9. Bảng dữ liệu STANDARDGIRL ........................................................... 40
Bảng 2.10. Bảng dữ liệu KNOWLEDGE ................................................................. 40
Bảng 2.11. Bảng dữ liệu EVENT.............................................................................. 41


LỜI CẢM ƠN
Trước hết tôi xin chân thành cảm ơn đến quý thầy cô khoa Tin Học trường Đại
Học Sư Phạm Đà Nẵng, đặc biệt là những thầy cô đã tận tình dạy bảo tơi trong suốt
q trình học tập tại trường.
Tôi xin gửi lời biết ơn sâu sắc đến ThS. Nguyễn Thanh Tuấn đã dành rất nhiều
thời gian và tâm huyết hướng dẫn nghiên cứu, giúp tơi hồn thành luận văn tốt
nghiệp này.
Tôi xin gửi lời cảm ơn chân thành công ty TNHH Tin Học & TM AsNet đã tạo
điều kiện thuận lợi, hỗ trợ tơi hồn thành luận văn. Tôi cũng xin gửi lời cảm ơn đến

anh Võ Minh Tuấn, anh Phan Ngọc An, chị Hà Đặng Lan Phương và các anh chị
trong công ty TNHH Tin Học & TM AsNet đã tận tình hướng dẫn và chỉ bảo tôi
trong thời gian qua.
Xin chân thành cảm ơn các bạn trong khoa Tin Học, những người bạn, anh chị
những người đã giúp đỡ chia sẻ những kiến thức, kinh nghiệm, tài liệu,... trong suốt
quá trình nghiên cứu thực hiện luận văn này.
Mặc dù đã có nhiều cố gắng hồn thiện luận văn bằng tất cả khả năng của
mình, tuy nhiên khơng tránh khỏi những thiếu sót, rất mong nhận được đóng góp
của thầy cơ và các bạn.
Xin chân thành cảm ơn!
Đà Nẵng, ngày 7 tháng 5 năm 2014
Sinh viên thực hiện

Nguyễn Thị Ly


LỜI CAM ĐOAN
Tôi xin cam đoan:
1. Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực
tiếp của thầy ThS. Nguyễn Thanh Tuấn, các anh chị trực tiếp hướng dẫn trên công
ty TNHH Tin Học & TM AsNet.
2. Mọi tham khảo trong luận văn này đều được trích dẫn rõ ràng tên tác giả, tên
cơng trình, thời gian, địa điểm cơng bố.
3. Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tơi xin chịu
hồn tồn trách nhiệm.
Sinh viên thực hiện

Nguyễn Thị Ly



LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

MỞ ĐẦU
A. Lý do chọn đề tài
Smartphone thực sự đã mang đến một cuộc cách mạng cho các thiết bị di động,
trong thời kỳ mà công nghệ số phát triển với tốc độ chóng mặt nhƣ hiện nay. Sự tiến
bộ vƣợt bậc của cơng nghệ đã làm thay đổi hồn tồn thói quen cũng nhƣ hành vi
của con ngƣời. Chỉ với một chiếc smartphone ngƣời ta có thể thỏa mãn hầu hết các
nhu cầu cơ bản nhƣ: trò chuyện, gửi tin nhắn, chơi game, nghe nhạc, lƣớt web, thanh
toán… Nhu cầu sử dụng smartphone ngày càng tăng.
Hiện nay, có rất nhiều nền tảng di động phổ biến nhƣ iOS, Android,
WindowsPhone,… Trong đó, iOS của Apple là một trong những hệ điều hành có
hƣớng phát triển mạnh mẽ. Các ứng dụng đƣợc xây dựng trên hệ điều hành iOS
ngày càng phổ biến và đƣợc nhiều ngƣời ƣa dùng không chỉ bởi thiết kế tinh tế, đẹp
mắt, dễ sử dụng mà những ứng dụng đƣợc phát triển trên iOS rất phong phú, đa
dạng, đáp ứng đƣợc nhu cầu ngƣời sử dụng.
Các bé sinh ra luôn nhận đƣợc sự quan tâm đặc biệt từ ba mẹ, những ngƣời thân
trong gia đình. Ngày qua đi, bé lớn dần trong tình yêu thƣơng của mọi ngƣời. Trong
khoảng thời gian đó, có biết bao sự kiện xảy ra mà ba mẹ muốn lƣu trữ và chia sẻ
với ngƣời thân, đặc biệt là những ngƣời thân ở xa.
Chính vì những lý do đó, tơi đã chọn đề tài "Tìm hiểu và xây dựng ứng dụng
nhật ký bé yêu trên hệ điều hành iOS" sử dụng trên thiết bị iPad với mong muốn xây
dựng một ứng dụng hữu ích cho phép ba mẹ lƣu trữ và chia sẻ các khoảnh khắc đáng
yêu về bé.
B. Mục đích và ý nghĩa của đề tài
- Cũng cố những kiến thức đã học trong thời gian qua.
- Nghiên cứu và tìm hiểu về lập trình ứng dụng trên hệ điều hành iOS.
- Xây dựng ứng dụng trên thiết bị iPad. Đây là một ứng dụng thuần Việt giúp ba

mẹ lƣu trữ và chia sẻ những khoảnh khắc, cảm xúc tuyệt vời về các bé yêu của
mình, chia sẻ với những ngƣời thân trong gia đình, lƣu trữ các thông tin cơ bản về
bé. Đồng thời cho phép ba mẹ ghi lại tình hình phát triển của bé về chiều cao, cân
nặng, từ đó đƣa ra nhận xét và lời khuyên. Hỗ trợ ba mẹ ghi chú các sự kiện tiếp
theo về bé, nhắc nhở trƣớc sự kiện đó. Ngồi ra ứng dụng giúp ba mẹ tìm hiểu một

SVTH: Nguyễn Thị Ly

Trang 1


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

số vấn đề thƣờng gặp trong nuôi dạy trẻ. Xây dựng đƣợc giao diện trực quan với
ngƣời dùng, dễ dàng trong cách sử dụng.
C. Đối tƣợng và phạm vi nghiên cứu
- Đối tƣợng: kiến thức cần thiết để xây dựng dứng dụng trên hệ điều hành iOS.
- Phạm vi nghiên cứu: quá trình nghiên cứu và thực thi chƣơng trình. Trong đó
phạm vi nghiên cứu của tôi bao gồm:
 Ứng dụng thuần Việt đáp ứng nhu cầu của ngƣời Việt Nam.
 Thiết bị hỗ trợ: iPad.
 Ngƣời sử dụng: ba mẹ và ngƣời thân của bé.
 Nội dung: chỉ liên quan tới các bé.
D. Phƣơng pháp nghiên cứu đề tài
- Thu thập, phân tích dữ liệu, đảm bảo dữ liệu sử dụng cho ứng dụng chính xác.
- Sử dụng cơ sở lý thuyết về ngơn ngữ lập trình Objective-C. Áp dụng linh hoạt
các UIElement và các framework trong iOS để xây dựng ứng dụng.
E. Cơng cụ và mơi trƣờng lập trình

- VMware Workstation 9.
- Mac OS X Mountain Lion 10.8.5 (file iso).
- Xcode 5.0.
Trong đó, VMware Workstation và hệ điều hành Mac OS X sử dụng cho việc
tạo ra một trƣờng lập trình.
Xcode là cơng cụ, bộ phát triển phần mềm tích hợp đƣợc Apple phát triển chạy
trên hệ điều hành Mac OS X để phát lập trình viên có thể phát triển phần mềm chạy
trên hệ điều hành Mac OS X và iOS. Phiên bản đầu tiên của Xcode đƣợc phát hành
vào năm 2003, phiên bản hiện tại đang dùng phổ biến là 5.0. Xcode đƣợc phát hành
miễn phí cho ngƣời dùng Mac OS X tải thông qua chợ ứng dụng App Store.
F. Cấu trúc luận văn
Luận văn đƣợc trình bày 3 chƣơng nhƣ sau:
Chƣơng 1: cơ sở lý thuyết.
Trong chƣơng này, tơi trình bày về các cơng cụ cần thiết đề lập trình, một số
kiến thức cơ bản về ngơn ngữ lập trình Objective-C, giới thiệu về hệ điều hành iOS,
cấu trúc và một số thành phần cơ bản trong hệ điều hành iOS đƣợc sử dụng để lập
trình. Đây là cơ sở để tạo nên một ứng dụng.

SVTH: Nguyễn Thị Ly

Trang 2


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

Chƣơng 2: Phân tích và thiết kế hệ thống.
Trong chƣơng này, tơi trình bày ý tƣởng xây dựng đề tài, phân tích các chức
năng. Phân tích về tổ chức cơ sở dữ liệu trong ứng dụng một cách logic và chặt chẽ

nhất.
Chƣơng 3: Một số kết quả của ứng dụng
Trong chƣơng này, tôi sẽ trình bày một số kết quả đạt đƣợc với các giao diện
chính của ứng dụng đƣợc xây dựng trong đề tài theo từng chức năng cụ thể.
Kết luận và hƣớng phát triển.
Trong phần này, tơi sẽ trình bày một số kết luận về đề tài, một số kết quả đạt
đƣợc, những hạn chế và hƣớng phát triển, hoàn thiện đề tài sau này.

SVTH: Nguyễn Thị Ly

Trang 3


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

CHƢƠNG 1. CƠ SỞ LÝ THUYẾT
1.1. CƠ BẢN VỀ NGƠN NGỮ LẬP TRÌNH OBJECTIVE-C
1.1.1. Giới thiệu
Ngơn ngữ lập trình Objective-C là ngơn ngữ lập trình hƣớng đối tƣợng đƣợc xây
dựng chủ yếu dựa trên nền tảng NASI C, và ngồi ra nó cịn đƣợc mở rộng từ
Smalltalk, một trong những ngôn ngữ lập trình hƣớng đối tƣợng đầu tiên. ObjectiveC đƣợc thiết kế với mục đích đƣa vào C các tính năng hƣớng đối tƣợng một cách
đơn giản và dễ hiểu nhất.
Objective-C là ngơn ngữ chính đƣợc Apple chọn để viết các ứng dụng cho hệ
điều hành Mac OS X, iPad, iPhone.
Nhƣ vậy, nếu đã có kiến thức tốt về C thì có thể nắm nhanh Objective-C và có
thể bắt đầu phát triển các ứng dụng cho iPhone và hệ điều hành Mac OS X. Nếu
khơng, nên dành thời gian tìm hiểu thêm về ngơn ngữ C trƣớc khi tìm hiểu
Objective-C.

1.1.2. Một số từ khóa thơng dụng
Dƣới đây là những từ khóa thơng dụng trong ngôn ngữ Objective-C.
Khai báo, định nghĩa các classes, categories, protocols:
-

@interface: sử dụng để khai báo một class.
@implementation: dùng để định nghĩa một class hay một category.
@protocol: sử dụng để khai báo một thủ tục hình thức (formal protocol).
@end: kết thúc khai báo, định nghĩa category hoặc protocol.

Sử dụng cho từng mục đích cụ thể:
- @class: khai báo tên của một lớp đƣợc định nghĩa ở đâu đó.
- @protocol (protocol_name): trả về protocol (thực thể của một Protocol class)
có tên trong dấu ngoặc. @protocol (khơng có tham số) cũng hợp lệ khi khai báo
chuyển tiếp (forward declarations).
- @encode (type_spec): cho ta chuỗi đã đƣợc encode của tham số type_spec.
- @”string”: định nghĩa một chuỗi NSString object và khởi tạo chuỗi với 7-bit
chuẩn ASCII-encoded.
- @synchronized (): định nghĩa một khối mã lệnh mà chỉ đƣợc chạy (execute)
bằng một thread tại mỗi thời điểm.

SVTH: Nguyễn Thị Ly

Trang 4


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn


Xử lý ngoại lệ:
- @try: định nghĩa một khối mã lệnh có thể phát sinh ngoại lệ.
- @throw: tung ra một ngoại lệ.
- @catch: bắt ngoại lệ bên trong khối mã lệnh @try.
- @finally: một khối mã lệnh đƣợc thực thi không cần biết có ngoại lệ xảy ra
trong hay khơng.
Phạm vi truy xuất biến:
- @private: giới hạn phạm vi trong lớp mà biến thể hiện đƣợc khai báo.
- @Protected (default): giới hạn phạm vi trong lớp và lớp con kế thừa mà biến
đƣợc khai báo.
- @public: không giới hạn phạm vi truy xuất.
1.1.3. Khai báo Class
Thông thƣờng trong Objective-C class đƣợc xây dựng trên 2 file .h (header file)
và .m (implement file). Header file chứa phần interface của class, implement file
chứa phần implementation của các phƣơng thức.
Tên file đặt theo tên class ví dụ lớp “ClassName” sẽ có 2 file ClassName.h và
ClassName.m
Class interface
Ví dụ:
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject
{
id caption;
id photographer;
}
@end
Khai báo phƣơng thức:
Có hai loại phƣơng thức:
 Phƣơng thức lớp (Class Method): phƣơng thức này đƣợc gọi thông qua tên

lớp đƣợc khai báo với dấu “+”.

SVTH: Nguyễn Thị Ly

Trang 5


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

+ (Kiểu dữ liệu)tên phƣơng thức: (kiểu dữ liệu) tên tham số thứ nhất…
 Phƣơng thức đối tƣợng: đƣợc gọi qua tên đối tƣợng:
- (Kiểu dữ liệu) tên phƣơng thức: (kiểu dữ liệu) tên tham số thứ nhất…
Ví dụ:
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject
{
NSString *caption;
NSString *photographer;
}
- (NSString*)caption;
- (NSString*)photographer;
- (void)setCaption:(NSString*)input;
- (void)setPhotographer:(NSString*)input;
@end
Cài đặt/thực hiện phƣơng thức lớp: Implement Class
#import "Photo.h"
@implementation Photo

- (NSString*)caption {
return caption;
}
- (NSString*)photographer {
return photographer;
}
- (void)setCaption:(NSString*)input {
caption = input;
}
- (void)setPhotographer:(NSString*)input {
photographer = input;
}
@end
1.1.4. Properties

SVTH: Nguyễn Thị Ly

Trang 6


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

Trong Objective-C hỗ trợ tính năng Properties, cho phép chúng ta định nghĩa
các bộ truy xuất (setter/getter) vì vậy sẽ có nhiều lợi ích sử dụng khi truy xuất đến
các biến thể hiện của đối tƣợng.
Định nghĩa trong file.h: @property (<attributes>) type propertyName;
Thực thi trong file.m: @synthesize propertyName;
Truy xuất đến properties thông qua cú pháp: object.property;

Các Options:
- readwrite (mặc định): cho phép đọc và ghi (get/set).
- read-only: chỉ có thể đọc (get).
- Assign (mặc định) dùng với các kiểu vô hƣớng: NSString, NSInteger,
CGFloat…
- retain: thƣờng đƣợc sử dụng cho đối tƣợng
- copy: tạo một bản sao lƣu của đối tƣợng.
- attomic (mặc định) thực hiện đồng bộ hoá.
- nonattomic: ngƣợc lại với atomic.
1.1.5. Category và Protocol
- Category
Objective-C khơng có đa thừa kế. Nhƣng vẫn có thể mở rộng một lớp nào đó bất
kỳ bằng cách sử dụng Category. Với Category có thể thêm vào một lớp các phƣơng
thức, biến. Đặc điểm này làm giảm đi đáng kể sự kế thừa phức tạp trong C++ khi
việc kế thừa chỉ để phục vụ cho việc thêm mới một phƣơng thức. Mặt khác việc chia
mã nguồn trên nhiều file cũng giúp ích đáng kể trong việc quản lý.
Ví dụ:
MyClass+MyCategory.h
@interface MyClass (MyCategory)
- (void)newMethod;
@end
MyClass+MyCategory.m
#import "MyClass+MyCategory.h"
@implementation MyClass (MyCategory)
- (void)newMethod;
{
// to do method…

SVTH: Nguyễn Thị Ly


Trang 7


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

}
@end
Khi sử dụng Category cần chú ý:
(1) Tên của Categories là duy nhất (khơng đƣợc trùng).
(2) Có thể thêm bao nhiêu lần mở rộng lớp dùng Category là không giới hạn
nhƣng với tên là duy nhất.
- Protocol
Đây là một đặc điểm tuyệt vời của Objectice-C, cho phép các lớp/đối tƣợng
khác biệt (không thừa kế) nhau có thể sử dụng phƣơng thức của nhau mà không cần
phải thừa kế.
Lƣu ý khi sử dụng các từ khóa:
 @optional: các method trong Protocol đƣợc khai báo sau từ khóa này
khơng bắt buộc phải implement trong lớp “thừa kế” Protocol.
 @required (mặc định): các method trong Protocol đƣợc khai báo sau từ
khóa này bắt buộc phải implement trong lớp “thừa kế” Protocol.
Protocol trong thực tế đƣợc sử dụng rất nhiều.
Ví dụ khai báo một Protocol
@protocol MyProtocol
//@required is default
- (void)requiredMethod;
@required
- (void)anotherRequiredMethod;
@optional

- (void)optionalMethod;
- (void)another OptionalMethod;
@end
1.1.6. Kế thừa
Tƣơng tự nhƣ các ngôn ngữ khác. Trong Objective-C, root class của tất cả các
class là NSObject.
Ví dụ về kế thừa trong Objective-C:

SVTH: Nguyễn Thị Ly

Trang 8


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(strong, nonatomic)NSString *name;
@property(assign, nonatomic)NSInteger age;
@ property(strong, nonatomic)NSString *address;
@property(strong, nonatomic)NSString *phone;
@end
Person.m
#import "Person.h"
@implementation Person
@synthesize name, age, address, phone;
@end

1.1.7. Quản lý bộ nhớ trong Objective-C
- Định nghĩa.
Quản lý bộ nhớ là quản lý việc khởi tạo vùng nhớ cho ứng dụng, sử dụng nó và
giải phóng nó khi ta đã hồn thành cơng việc. Một chƣơng trình quản lý bộ nhớ tốt
sẽ sử dụng ít vùng nhớ nhất có thể.
- Các phƣơng pháp quản lý bộ nhớ trong Objective-C
Objective-C cung cấp 3 cách quản lý bộ nhớ :
• Manual Reference Counting (MRC): quản lý bộ nhớ thủ cơng, có nghĩa là chúng
ta sẽ tự quản lý bộ nhớ bằng cách đánh dấu, theo vết vòng đời của object. Cụ thể là
ta sẽ đếm việc khởi tạo, sử dụng và giải phóng object trong chƣơng trình.
• Autiomatic Reference Counting (ARC): quản lý bộ nhớ tự động, hệ thống sẽ
dùng bộ đếm tƣơng tự nhƣ MRC nhƣng nó sẽ thêm vào phƣơng thức quản lý bộ nhớ
tự động tại thời điểm hồn thành.
• Garbage Collection (GC): hệ thống sẽ tự động lƣu vết và tự động giải phóng
vùng nhớ của object khơng cần thiết nữa. Nó sử dụng kỹ thuật quản lý bộ nhớ khác
với MRC và ARC, tuy nhiên GC chỉ hỗ trợ Mac OS X mà không hỗ trợ iOS.
- Reference Counting

SVTH: Nguyễn Thị Ly

Trang 9


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

• Reference Counting (hoặc Retain Counting): là một kỹ thuật quản lý bộ nhớ của
Objective-C nhằm theo vết vòng đời của đối tƣợng (object), đếm số lƣợng tham
chiếu đến một đối tƣợng.

• Reference Count (hoặc Retain Count): số lƣợng tham chiếu đến một đối tƣợng.
• Khi đối tƣợng đƣợc khởi tạo bằng các từ khóa nhƣ alloc, new, copy thì reference
count của nó sẽ tự động là 1.
• Để tăng reference count lên 1, ta gửi thơng điệp retain cho đối tƣợng.
• Để giảm reference count xuống 1, ta gửi thông điệp release cho đối tƣợng.
• Để có thể biết đƣợc reference count hiện tại, ta cần gửi thơng
điệp retainCount cho đối tƣợng.
• Khi reference count giảm xuống 0 thì đối tƣợng sẽ đƣợc hủy, vùng nhớ đƣợc
giải phóng, lúc này hệ thống sẽ tự động gửi thông điệp dealloc cho đối tƣợng.
Ta có sơ đồ sau:

Hình 1.1. Sơ đồ quản lý bộ nhớ trong Objective-C
- Từ khóa
• alloc hoặc new
Mục đích:
Cấp phát bộ nhớ cho đối tƣợng.
Reference coun: bằng 1.
Ví dụ:
NSString *str = [[NSString alloc] init];
• copy
Mục đích:
Cấp phát bộ nhớ cho đối tƣợng thông qua một đối tƣợng khác.
Reference count: bằng 1.
Ví dụ:
NSString *str = [someString copy];
• retain
Mục đích:

SVTH: Nguyễn Thị Ly


Trang 10


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

Gọi khi ta cần sử dụng một đối tƣợng, mà đối tƣợng đó đã đƣợc cấp phát ở đâu
đó, ta khơng chắc là tại thời điểm ta sử dụng thì đối tƣợng đó có bị release hay
khơng. Gọi retain giống nhƣ thơng báo cho chủ sở hữu của nó là “Đừng xóa nó cho
đến khi tơi sử dụng nó xong”. Khi gọi retain thì lúc này chúng ta là chủ sở hữu mới
của nó (bên cạnh chủ sở hữu cũ). Khi nào sử dụng xong cần phải release nó.
Reference count: tăng thêm 1.
Ví dụ:
NSString *str = [[NSString alloc] initWithString:@"hello"];
NSString *str2 = str;
[str release];
Sau vài giây thì str2 khơng cịn lƣu đúng nội dung.
Trong ví dụ trên, biến str2 chỉ đơn giản là trỏ đến vùng nhớ của biến str, một khi
ta giải phóng biến str thì biến str2 sẽ lƣu khơng cịn đúng nội dung nữa. Giải pháp :
NSString *str = [[NSString alloc] initWithString:@"hello"];
NSString *str2 = [str retain];
[str release];
//str2 vẫn còn lƣu đúng nội dung cho tới khi ta giải phóng nó
[str2 release];
• release
Mục đích:
Báo cho hệ thống biết là ta đã sử dụng xong 1 đối tƣợng nào đó và cần giải
phóng nó. Đối tƣợng sẽ thực sự đƣợc giải phóng chỉ khi khơng cịn ai sở hữu nó nữa
(reference count = 0)

Reference count: giảm xuống 1 ngay lập tức.
• autorelease
Mục đích:
+ Khi ta khơng muốn giải phóng một đối tƣợng nào đó ngay lập tức.
+ Khi ta khơng muốn phải ghi nhớ lúc nào nên release những đối tƣợng mà ta đã
cấp phát khi sử dụng xong.
+ Khi ta muốn thêm một đối tƣợng vào autorelease pool.
Reference count: giảm xuống 1 nhƣng khơng ngay lập tức.
• Convenience methods

SVTH: Nguyễn Thị Ly

Trang 11


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

Khái niệm:
Là những phƣơng thức static, dùng để cấp phát và khởi tạo đối tƣợng một cách
trực tiếp. Đối tƣợng đƣợc tạo ra từ phƣơng thức convenience gọi là autorelease
object, và ta không sở hữu đối tƣợng này.
NSString *str2 = [NSString stringWithFormat:@"%d", 4];
Tất cả các autorelease objects đƣợc tạo ra sẽ đƣợc thêm vào autorelease pool
hiện tại.
• Autorelease Pool
Khái niệm:
Là nơi chứa và giải phóng các autorelease objects . Khi autorelease pool đƣợc
giải phóng (thƣờng là hết vịng lặp hay kết thúc hàm) thì các object nằm bên trong

nó cũng sẽ đƣợc tự động giải phóng.
Khi nào nên sử dụng:
+ Khi ta muốn tự hủy một loạt các autorelease objects.
+ Trong trƣờng hợp cụ thể khi ta sử dụng nhiều biến tạm và muốn tránh phải cấp
phát và release tất cả những biến này khi sử dụng xong.
+ Hoặc ta không muốn đợi autorelease pool của hệ thống đƣợc giải phóng, ta sẽ
sử dụng đối tƣợng thuộc lớp NSAutoreleasePool.
for (int i = 0; i < 99; i++){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = [NSString stringWithFormat:@"%d", i];
NSString *str2 = [NSString stringWithFormat:@"%d", i];
//...
[pool release];
//Các autorelease objects ở trên sẽ đc giải phóng
}
Nhƣ ví dụ trên đây, nếu nhƣ ta khơng dùng lớp NSAutoreleasePool thì khi chạy
hết 99 vòng lặp, các autorelease objects nằm trong autorelease pool mới đƣợc giải
phóng, và điều đó sẽ gây ra hiện tƣợng tràn bộ nhớ.
• Hệ quả từ Autorelease Pool
Khi trong hàm ta sử dụng nhiều biến đƣợc cấp phát, và không muốn suy nghĩ
lúc nào nên release biến này, lúc nào nên release biến kia, ta chỉ cần kẹp đoạn code

SVTH: Nguyễn Thị Ly

Trang 12


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn


giữa NSAutoreleasePool , rồi cho biến đó autorelease, sau đó ta vẫn sử dụng nó
đƣợc bình thƣờng.
NSAutoreleasePool *pool= [NSAutoreleasePool alloc] init];
Animal *animal= [Animal alloc] initWithName:@"Animal"];
[animal autorelease];
Zoo *zoo = [[Zoo alloc] init];
[zoo autorelease];
[zoo add:animal];
[pool release];
1.1.8. Các đối tƣợng cơ bản trong Objective-C
NSString
NSString là gì? Nó là một đối tƣợng. Khi tạo một biến với đối số này, ta sẽ có
nơi lƣu trữ chuỗi cần thiết và không giới hạn về độ dài của chuỗi mà để lƣu vào biến
đó.
Cách khai báo:
NSString *chuoi1;
NSString *chuoi2 = [NSString stringWithFormat:@"Day la chuoi 1"];
NSString *chuoi3 = [NSString stringWithString:chuoi2];
Các hàm xử lý chuỗi đối với NSString:
- length: lấy độ dài của chuỗi.
- characterAtIndex: lấy ra ký tự ở vị trí chỉ định.
- componentsSeparatedByString: cắt chuỗi thành nhiều phần.
- substringFromIndex: lấy chuỗi con tính từ vị trí chỉ định đến cuối chuỗi.
- substringToIndex: lấy ra chuỗi con tính từ vị trí chỉ định đến đầu chuỗi.
- rangeOfString: tìm xem mơt chuỗi nào có tồn tại trong chuỗi cho trƣớc khơng.
- stringByReplacingOccurrencesOfString:withString: thay thế một chuỗi bằng
một chuỗi mới trong chuỗi cho trƣớc.
- compare: so sánh hai chuỗi với nhau.
- intValue: lấy số nguyên ra từ chuỗi.

NSMutableString

SVTH: Nguyễn Thị Ly

Trang 13


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

NSMutableString cũng tƣơng tự nhƣ NSString, nhƣng NSMutableString thì có
thể chỉnh sửa đƣợc đến từng ký tự bên trong chuỗi.
Cịn NSString chỉ có thể gán thay thế tồn bộ giá trị trong đó,… Hiểu đơn giản
là với NSString thì khả năng thay thế, xử lý chuỗi hạn chế hơn NSMutableString.
Chú ý: khi một đối tƣợng nào có tính “Mutable” (ví dụ: NSMutableString,
NSMutableArray, NSMutableDictionary,…) thì sẽ hiểu là tính thay thế, chỉnh sửa
giá trị sẽ dễ dàng, thuận tiện. Và ngồi ra, nó cịn đƣợc gọi là tính “động” giá trị.
Cách khai báo:
NSMutableString *chuoiDong1;
NSMutableString *chuoiDong2 = [[NSMutableString alloc] init];
NSMutableString *chuoiDong3 = [NSMutableString tringWithString:chuoi2];
Chú ý: để NSMutableString hoạt động, cần gán vùng nhớ cho nó bằng cách init
hoặc gán ngay vào nó một chuỗi bất kỳ, hoặc một chuỗi khơng có ký tự @“”
Các hàm xử lý chuỗi với NSMutableString:
Hoàn toàn giống với với String, NSMutableString kế thừa tồn bộ những hàm
mà String có.
Ngồi ra còn thêm một số hàm cần quan tâm nhƣ sau:
- appendFormat: ghép thêm một chuỗ với các định dạng thêm vào cuối chuỗi
đã cho.

- appendString: ghép thêm một chuỗi bất kỳ vào cuối chuỗi đã cho.
- deleteCharactersInRange: xóa ký tự bất kỳ trong chuỗi với vị trí đƣợc chỉ
định.
- insertString:atIndex: chèn thêm chuỗi vào vị trí đƣợc chỉ định.
- replaceCharactersInRange:withString: thay thế ký tự ở vị trí chỉ định với một
chuỗi bất kỳ.
NSArray
NSArray là mảng, tập hợp nhiều giá trị với nhau có cùng hoặc khác kiểu (tùy
theo mục đích sử dụng).
Cách khai báo:

SVTH: Nguyễn Thị Ly

Trang 14


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

NSArray *mang1;
NSArray *mang2 = [NSArray arrayWithObjects:@"ky tu", @"ky tu 2",
@"chuoi", nil];
NSArray *mang3 = [NSArray arrayWithObjects:@"abc", @"def",nil];
NSArray *mang4 = [NSArray arrayWithArray:mang2];
Các hàm xử lý thao tác với mảng:
-

containsObject: kiểm tra xem trong mảng phần tử nào đó hay khơng.
Count: đếm số phần tử trong mảng.

lastObject: lấy ra phần tử cuối cùng.
objectAtIndex: lấy ra phần tử ở thứ tự chỉ định.
objectsAtIndexs: lấy ra các ký tự ở các vị trí chỉ định.
indexOfObject: tìm vị trí của phần tử trong mảng.

NSMutableArray
Thông qua NSMutableString sẽ hiểu nhanh NSMutableArray, nó sẽ tạo một
biến mà các phần tử trong mảng đó có thể thay đổi (thay thế, xóa, thêm vào).
Cách khai báo:
NSMutableArray *mangDong1;
NSMutableArray *mangDong2 = [[NSMutableArray alloc] init];
NSMutableArray *mangDong3 = [NSMutableArray arrayWithObjects:@"So 1",
@"So 2", nil];
NSMutableArray *mangDong4 = [NSMutableArray arrayWithArray:mang2];
Nó kế thừa các hàm của Array. Ngồi ra có thêm các hàm xử lý sau:
- addObject: thêm một phần tử vào cuối mảng.
- addObjectsFromArray: thêm nhiều phần tử từ một mảng bên ngoài vào.
- insertObject:atIndex: chèn một phần tử vào mảng với vị trí chỉ định.
- insertObjects:atIndexs: chèn nhiều phần tử vào mảng với các vị trí chỉ định.
- removeLastObject: xóa phần tử cuối mảng.
- removeObject: xóa phần tử đƣợc chỉ định.
- removeObjectAtIndex: xóa phần tử ở vị trí nào đó.
- replaceObjectAtIndex:withObject: thay thế phần tử ở vị trí chỉ định với một
phần tử khác.

SVTH: Nguyễn Thị Ly

Trang 15



LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

- removeAllObjects: xóa toàn bộ các phần tử trong mảng.
NSDictionary
Kiểu dữ liệu mảng quản lý Object theo key.
NSMutableDictionary
Kiểu dữ liệu NSMutableDictionary là subclass của NSDictionary.
Ngồi ra cịn một số đối tƣợng khác.
1.2. HỆ ĐIỀU HÀNH iOS
1.2.1. Giới thiệu
iOS là hệ điều hành trên các thiết bị di động của Apple đƣợc phát hành vào năm
2007. Ban đầu hệ điều hành này chỉ có thể phát triển để chạy trên thiết bị iPhone
(phiên bản đầu tiên có tên là iPhone 2G), nhƣng sau đó nó đã đƣợc mở rộng để có
thể chạy trên các thiết bị khác của Apple nhƣ iPod touch, iPad và Apple TV…
Giao diện ngƣời dùng của iOS dựa trên cở sở thao tác bằng tay. Ngƣời dùng có
thể tƣơng tác thơng qua các thao tác bằng tay trên màn hình cảm ứng, hoặc các nút
đƣợc trang bị trên thiết bị của Apple.
Hiện nay, trên App Store của Apple chứa trên 1 triệu ứng dụng iOS, với một
cộng đồng sử dụng rất lớn. Phiên bản mới nhất của iOS là 7.1 đƣợc Apple chính
thức phát hành vào ngày 11/3/2014. Phiên bản mới này mang tới một số thay đổi
trong giao diện cũng nhƣ nâng cao trải nghiệm của ngƣời dùng.
1.2.2. Kiến trúc
Mơ hình kiến trúc iOS

SVTH: Nguyễn Thị Ly

Trang 16



LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

Cocoa Touch
Media Services
Core Services
Core OS

iPhone Hardware
Hình 1.2. Sơ đồ kiến trúc iOS

a) Tầng Cocoa Touch
Cocoa là tập hợp các framework hƣớng đối tƣợng, cung cấp môi trƣờng thực thi
cho các ứng dụng chạy trên các hệ điều hành Mac OS và iOS. Cocoa là môi trƣờng
phát triển ứng dụng phổ biến và hiệu quả trong Mac OS, và là môi trƣờng phát triển
ứng dụng duy nhất trên iOS. Cocoa trong iOS đƣợc gọi là Cocoa Touch. Nó bao
gồm các bộ framework chính là:
- Đa nhiệm.
- Local notification.
- Nhận diện các thao tác trên màn hình cảm ứng.
- Map Kit: cung cấp các giao diện lập trình và thƣ viện để xây dựng các ứng
dụng dựa trên bản đồ, định tuyến, xác định địa điểm hiện tại của ngƣời dùng.
- Message UI Framework: cung cấp thƣ viện để soạn và gởi email.
- iAd Framework: cho phép lập trình viên nhúng các banner quảng cáo vào ứng
dụng.
- Push notification: là dịch vụ chạy thƣờng trực trên thiết bị, cho phép nhận
thông báo đƣợc gởi bằng Push notification service ngay cả khi ứng dụng
không đƣợc chạy.

b) Tầng Media
Cung cấp cho các ứng dụng iOS khả năng xử lí, khai thác hình ảnh, âm thanh,
video, truyền hình. Các framework của tầng này bao gồm:

SVTH: Nguyễn Thị Ly

Trang 17


LUẬN VĂN TỐT NGHIỆP

GVHD: ThS. Nguyễn Thanh Tuấn

- Assets Library.
- AV Foundation.
- Core Audio.
- Core Graphics.
- Core MIDI.
- Core Video.
- Media Player.
- Quartz Core.
- OpenGL ES.
c) Tầng Core Service
Đây là tầng chứa các dịch vụ cơ bản của hệ thống mà hầu hết các ứng dụng đều
sử dụng. Các thành phần của lớp này bao gồm:
-

High-level Features.

-


In-app Purchase.

-

SQLite.

-

XML Support.

-

Block object.

-

Core Services Framework.

-

Address Book.

-

Core Data.

-

Core Foundation.


-

Core Location.

-

Core Media.

-

System Configuration.

d) Tầng Core OS
Đây là lớp chứa các đặc trƣng ở mức thấp (low-level features). Lập trình viên sẽ
ít sử dụng trực tiếp lớp này (trừ khi thao tác với các thiết bị phần cứng khác hoặc các
vấn đề bảo mật) mà sẽ sử dụng gián tiếp thơng qua các lớp phía trên. Lớp này bao
gồm các thành phần sau:

SVTH: Nguyễn Thị Ly

Trang 18


×