Bảng 1.1 Thông tin về hệ điều hành IOSBảng 2.1 Kiểu dữ liệu trong Objectived-C Bảng 2.2 Các phép toán trong Objectived-C Hình 1.1 Phân lớp trong hệ điều hành IOS Hình 2.1 So sánh atomic
Trang 1KHOA MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG
Giáo viên hướng dẫn: THS TRẦN MẠNH HÙNG
Sinh viên thực hiện:
Trang 2MỞ ĐẦU
Ngày nay xu hướng sử dụng Smartphone và máy tính bảng đang gia tăng nhanh chóngtrên thế giới nói chung và Việt Nam nói riêng, trong đó Việt Nam hiện đang đứng thứ haithế giới về tốc độ tăng trưởng smartphone & máy tính bảng với tốc độ tăng trưởng 266%.Android, iOS, Windows Phone là những hệ điều hành chạy trên Smartphone và máy tínhbảng phổ biến nhất thế giới: Android 75%, iOS 17,3%, Windows Phone 3,2% Tại ViệtNam, theo nghiên cứu của IDC, vào thời điểm quý 2/2013, iOS đang chiếm tỉ lệ 1.6%trên tổng số thiết bị phân phối tại Việt Nam, đứng thứ ba sau Android và WindowsPhone
Cùng với sự tăng trưởng của Smartphone và các hệ điều hành chạy trên Smartphone, sốlượng ứng dụng cho các hệ điều hành ngày càng tăng, tính cho đến hết năm 2012, sốlượng ứng dụng iOS trên Apple App Store đã hơn 775.000 ứng dụng và Google Play đã
có hơn 700.000 ứng dụng.Với sự phát triển quy mô lớn của ứng dụng, nhu cầu tìm hiểu
về lập trình ứng dụng cho các hệ điều hành cũng tăng dần
Với tầm nhìn trên, nhóm chúng em quyết định chọn đề tài “Tìm hiểu lập trình trên IOS
và làm ứng dụng demo” Đề tài này giúp mọi người có thể nắm được các yếu tố nền
tảng và phát triển được phần mềm ứng dụng trên iphone
Phạm vi nghiên cứu của đề tài
Nghiên cứu về hệ điều hành IOS
Nghiên cứu ngôn ngữ lập trình Objective-C và bộ công cụ hổ trợ Xcode
Các thao tác và đối tượng trong Objective-C
Làm ứng dụng demo
Trang 3Trước tiên nhóm em xin gửi lời cám ơn chân thành sâu sắc tới các thầy cô trong TrườngĐại Học Công nghệ Thông Tin nói chung và các thầy cô trong khoa Mạng Máy Tính vàTruyền Thông nói riêng đã tận tình giảng dạy, truyền đạt cho nhóm em những kiến thức,kinh nghiệm quý báu trong suốt thời gian qua.
Đặc biệt, Nhóm xin gởi lời cảm ơn chân thành đến Ths.Trần Mạnh Hùng là người trựctiếp hướng dẫn nhóm thực hiện đồ án này Trong quá trình làm việc với thầy, nhóm emkhông ngừng tiếp thu thêm nhiều kiến thức bổ ích về môn học và có thể tự tin hoàn thànhtốt đồ án của nhóm Sau cùng, nhóm xin gửi lời cảm ơn chân thành tới chúng ta bè đã cónhững đóng góp ý kiến và giúp đỡ trong quá trình thực hiện đồ án môn học
Mọi lời góp ý của thầy nhóm xin chân thành lắng nghe và tiếp thu
Một lần nữa, nhóm em xin chân thành cảm ơn!
TPHCM, tháng 12 năm 2013
Nhóm thực hiệnTrương Nhựt Bình – Trần Phúc Duy – Tạ Văn Tuyển
Trang 4(Của giáo viên hướng dẫn)
Trang 5
MỤC LỤC
Mở đầu
Lời cảm ơn
Nhận xét của GVHD
Trang
CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH IOS 1
1.1 Hệ điều hành IOS 1
1.2 Môi trường phát triển ứng dụng 2
1.2.1 Cấu trúc của hệ điều hành IOS 2
1.2.2 Lớp Core OS (lớp nhân trong) 3
1.2.3 Lớp Core Service (lớp nhân dịch vụ) 4
1.2.4 Lớp Media Services (lớp liên kết) 5
1.2.5 Lớp Cocoa Touch (lớp tiếp xúc) 6
CHƯƠNG 2: NGÔN NGỮ LẬP TRÌNH OBJECTIVE-C 9
2.1 Lịch sử phát triển ngôn ngữ Objective-C 9
2.2 Tổng quan về Objective-C 11
2.3 Các yếu tố căn bản của Ojective-C 13
2.3.1 Khai báo biến và cách sử dụng 13
2.3.1.1 Biến 13
2.3.1.2 Quy tắc đặt tên 13
2.3.1.3 Kiểu dữ liệu 14
2.3.1.4 Phép toán 15
2.3.2 Từ khóa 15
2.3.2.1 Khai báo class, category và protocol 15
Trang 62.3.2.3 Xử lý ngoại lệ 16
2.3.3 Câu lệnh trong Objective-C 17
2.3.4 Mảng 20
2.3.4.1 Định nghĩa 20
2.3.4.2 Mảng NSArray 20
2.3.5 Chuỗi – Đối tượng NSString 21
2.3.5.1 Khởi tạo chuỗi 21
2.3.5.2 Đối tượng NSString 21
2.3.6 Đối tượng 22
2.3.6.1 ID 22
2.3.6.2 Ép kiểu động 22
2.3.6.3 Quản lý bộ nhớ 22
2.3.7 Lớp 23
2.3.7.1 Định nghĩa lớp 23
2.3.7.2 Phương thức 24
2.3.7.3 Kế thừa 26
2.3.8 Properties 27
2.3.9 Category 28
2.3.10 Protocol 29
2.3.11 Selector 29
2.3.12 Association References 31
CHƯƠNG 3 BỘ CÔNG CỤ HỖ TRỢ LẬP TRÌNH XCODE 32
3.1 Iphone SDK-Iphone Software Development Kit 32
3.2 Các thành phần của Iphone SDK 33
3.3 Xcode 33
Trang 73.4 Các mẫu ứng dụng trong Xcode 37
3.5 Tổng quan về XCode Project 39
3.6 Thêm các Framewok và project 41
3.7 IPhone Simulator 42
3.8 Interface Builder 45
3.9 Instrument 46
3.10 Xây dựng và cài đặt ứng dụng 47
3.11 Mô hình MVC (Model-View-Controller) 47
CHƯƠNG 4: MỘT SỐ THAO TÁC CƠ BẢN 52
4.1 App Icon – Loading Screen 52
4.1.1 App Icon 52
4.1.2 Loading Screen 52
4.2 Thay đổi App Name 52
4.3 Ẩn Status Bar 54
4.4 Background 55
4.4.1 Background Image 55
4.4.2 Background Color 55
4.5 Thêm Framework 56
CHƯƠNG 5: MỘT SỐ ĐỐI TƯỢNG CƠ BẢN 59
5.1 Đối tượng Label – Button – Text Field 59
5.1.1 Đối tượng Label 59
5.1.2 Đối tượng Button 60
5.1.3 Đối tượng Text Field 61
5.2 Kết nối cơ sở dữ liệu với Sqlite 62
5.2.1 Giới thiệu 62
5.2.2 Cài đặt Sqlite Manager cho Firefox 62
Trang 8CHƯƠNG 6: XÂY DỰNG PHẦN MỀM XEM THÔNG TIN THỜI TIẾT 64
6.1 Ứng dụng xem thông tin thời tiết 64
6.1.1 Giới Thiệu 64
6.1.2 Chuẩn Bị 64
6.1.3 Cấu trúc phần mềm 64
6.1.4 Cơ chế vận hành 65
6.1.5 Tính Năng 67
CHƯƠNG 7: TỔNG KẾT 68
Trang 9Bảng 1.1 Thông tin về hệ điều hành IOS
Bảng 2.1 Kiểu dữ liệu trong Objectived-C
Bảng 2.2 Các phép toán trong Objectived-C
Hình 1.1 Phân lớp trong hệ điều hành IOS
Hình 2.1 So sánh atomic và noautomic
Hình 3.1: Quá trình cài đặt Xcode
Hình 3.2 Giao diện Xcode
Hình 3.3: Giao diện khi vào XCode
Hình 3.4: Tạo giao diện bằng Menu
Hình 3.5: Lựa chọn mẫu cho project
Hình 3.6: Giao diện project mới tạo
Hình 3.7: Các mẫu ứng dụng trong XCode
Hình 3.8: Các thành phần trong một project
Hình 3.9: Thêm framework vào project
Hình 3.10: Giao diện Iphone Simulator
Hình 3.11: Giao diên Interface Builder
Hình 3.12: Instrument
Hình 4.1 Thay đổi tập tin plist
Hình 4.2 Sửa đổi Bundle display name
Trang 10Hình 5.2: Thuộc tính của Label
Hình 5.3: Button
Hình 5.4: Thuộc tính của Button
Hình 5.5: Text Field
Hình 5.6: Thuộc tính của Text Field
Hình 5.7: Addon của SQLite
Hình 5.8: Thêm framework hỗ trợ SQLite
Hình 6.1: Thông tin về ứng dụng xem thời tiết
Hình 6.2: Thông tin thời tiết trên wunderground.com
Sơ đồ 3.1: Mô hình MVC
Sơ đồ 3.2: Model-View-Controller Layer
Sơ đồ 3.3: Đối tượng thông dụng của IOS
Sơ đồ 6.1: Mô hình truy xuất dữ liệu
Trang 11CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH IOS1.1 Hệ điều hành IOS
IOS là hệ điều hành trên các thiết bị di động của Apple Ban đầu hệ điều hành này chỉđược phát triền để chạy trên Iphone, nhưng sau đó nó đã mở rộng để chạy trên các thiết bịcủa Apple như iPod touch, iPad và Apple TV Ngày 31 tháng 5 năm 2011, Apple Sotrecủa Apple chứa khoảng 500 000 ứng dụng IOS và được tải về tổng cộng khoảng 15 tỷlần Trong quý 4 năm 2010, có khoảng 26% điện thoại thông minh chạy hệ điều hànhIOS, sau hệ điều hành Android của Google và Symbia của Nokia
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 với hệ điều hành này thông qua rất nhiều động tác bằng tay trên màn hình cảmứng của các thiết bị của Apple
Hệ điều hành này được tiết lộ tại Hội nghị và Triển lãm Macworld diễn ra vào tháng 1năm 2007 và được phát hành vào tháng 9 năm đó Khi đó, hệ điều hành này chưa có mộtcái tên riêng nên chỉ đơn giản là “Iphone chạy OS X” Ban đầu, ứng dụng của bên thứ bakhông được hổ trợ Steve Job đã chỉ ra rằng những nhà phát triển có thể xây dựng cácứng dụng web mà “sẽ cư xử như những ứng dụng ban đầu trên Iphone” Vào ngày 17tháng 10 năm 2007, Apple thông báo một bộ phát triền phần mềm đáng được xây dựng
và họ dự định sẽ đưa nó đến “tay các nhà phát triển vào tháng 2” Ngày 6 tháng 3 năm
2008, Apple đã phát hành bản dùng thử đầu tiên, cùng với một cái tên mới cho hệ điềuhành đó là “Iphone OS”
Tháng 6 năm 2010, Apple đổi cái tên Iphone OS thành IOS Nhãn hiệu “IOS” đã đượcCisco dùng để đặt tên cho hệ điều hành của mình Để tránh các vụ kiện cáo, Apple đã xingiấy phép sử dụng nhãn hiệu IOS từ Cisco
Trang 12Available language(s) Đa ngôn ngữ
Nền tảng hỗ trợ ARM (iPhone, iPod touch, iPad, và Apple TV)
Giao diện người dùng Cocoa Touch (Multi-touch, GUI)
Giấy phép Quyền sở hữu EULA ngoại trừ các thành phần mã nguồn mở
Trang mạng
www.apple.com/ios
Bảng 1.1 Thông tin về hệ điều hành IOS
1.2 Môi trường phát triển ứng dụng
1.2.1 Cấu trúc của hệ điều hành IOS
Apple không cho phép người dùng tiếp cận trực tiếp với bất kì phần cứng nào củaIphone, mọi tương tác phần cứng phải thông qua một số lớp khác nhau của phần mềm,hoạt động như một trung gian giữa các ứng dụng và thiết bị phần cứng Những lớp nàyđược hiểu như một hệ điều hành , cụ thể ở đây là hệ điều hành IOS
Mỗi lớp của hệ điều hành cung cấp một mức độ ngày càng cao của sự trừu tượnghóa với sự phức tạp của cách làm việc với phần cứng
Trang 13Hình 1.1 Phân lớp trong hệ điều hành IOS
1.2.2 Lớp Core OS (lớp nhân trong)
Là lớp dưới cùng của IOS, nó là nền tảng của hệ điều hành Nó đảm nhiệm cácnhiệm vụ như quản lí bộ nhớ, file hệ thống, kiên kết mạng và một số chức năng khác, nótác động trực tiếp tới phần cứng Lớp Core OS bao gồm một số thành phần sau:
CFNetwork Framework: Cung cấp một giao diện dựa trên C tới các lớp giao
thức mạng TCP/IP và truy cập mức thấp tới socket BSD Nó cho phép mã ứng
Trang 14dụng được viết và làm việc với các dịch vụ HTTP, FTP và DNS, khởi tạo bảomật và mã hóa các kết nối sử dụng Secure Sockets Layer (SSL) hoặc TransportLayer Security (TLS).
External Accessory framework: Cung cấp khả năng kết nối với những phụ
kiện kết nối vật lý mở rộng tới Iphone thông qua 30-pin dock connector hoặcqua Bluetooth
Security framework: Cung cấp các giao diện bảo mật khi chúng ta kết nối tới
mạng mở rộng bên ngoài như chứng thực, khóa công khai và khóa private, mãhóa và xác thực sử dụng hàm băm (HMAC)
System (LibSystem): IOS được xây dựng dựa trên nền tảng UNIX, vì thế
những thành phần hệ thống của Core OS cung cấp nhiều chức năng giống với
hệ điều hành UNIX Nó bao gồm nhân hệ điều hành (Mach Kernel) và cácDriver của các thiết bị Nhân là nền tảng của toàn bộ IOS được xây dựng vàcung cấp giao diện mức thấp cho các phần cứng lớp nằm dưới Nhân chịu tráchnhiệm cấp phát bộ nhớ, quản lý chu kì sống của tiến trình, đầu vào/ đầu ra,kiên lạc đa tiến trình, quản lý luồng, kết nối mạng mức thấp quản lý luồng vàtruy cập hệ thống
1.2.3 Lớp Core Service (lớp nhân dịch vụ)
Lớp Core Service cung cấp các dịch vụ dựa trên nền tảng của lớp Core OS Nó cungcấp những truy cập cơ bản tới các dịch vụ của IOS và nó bao gồm các thành phần sau:
AddressBook framework: Cung cấp truy cập có thứ tự tới cơ sở dữ liệu về
danh bạ của Iphone, cho phép các ứng dụng có thể lưu trữ và sửa đổi các mụcdanh bạ
Core Data Framework: Được cung cấp để dễ dàng tạo ra các mô hình dư liệu
và lưu trữ trong các ứng dụng dựa trên Model-View-Controller (MVC) Sửdụng framework này giảm được số lượng mã cần phải viết để thực hiện nhữngcông việc thông thường khi làm việc với cấu trúc dữ liệu trong ứng dụng
Trang 15Core Foundation Framework: Cung cấp các thứ như kiểu dữ liệu, thao tác
trên chuỗi, quản lý khối dữ liệu có thứ tự, thao tác URL, các luồng và chạy cácvòng lặp, thời gian, thao tác XML cơ bản, các cổng và các kết nối socket
Foundation Framework: Là một framework chuẩn của Objective-C Nó chứa
những gói Objective-C xung quanh Core Foundation Framework
Core Location Framework: Cho phép chúng ta lấy được thông tin về vị trí
hiện thời của thiết bị và cso khả năng định hướng Phương thức dùng bởi thiết
bị để cung cấp tọa độ sẽ phụ thuộc trên dữ liệu có sẵn tại thời gian thông tinđược yêu cầu và phần cứng hỗ trợ được cung cấp bởi model Iphone cụ thể màứng dụng chạy trên đó Nó sẽ dựa trên việc phân tích GPS, dữ liệu mạng Wifihoặc phép đo tam giác cột thu phát sóng
Store Kit Framework: Mục đích của phần này là tạo sự dễ dàng trong việc
trao đổi thương mại giữa uwngsd ụng của chúng ta và Apple Store
SQLite library: Cho phép lưu trữ cơ sở dữ liệu nhỏ, SQL dựa trên cơ sở dữ
liệu để tạo và thao tác với những cơ sở dữ liệu bên trong ứng dụng
1.2.4 Lớp Media Services (lớp liên kết)
Lớp Media Service của IOS cung cấp các khả năng về audio, video, animations vàgraphics Như các lớp khác trong ngăn xếp của IOS, lớp media bao gồm một số cácFramework cái mà có thể được sử dụng trong những ứng dụng Iphone:
Core Graphics Framework: Cung cấp một máy dựng hai chiều nhẹ Những
tính năng của Framework này bao gồm việc tạo và trình diễn những file PDF,bản vẽ dựa trên Vector, các lớp trong suốt, đường dẫn dựa trên bản vẽ, thao tác
và quản lý màu sắc
Quartz Core Framework: Mục đích của Framework này là cung cấp khả
năng hoạt hình cho Iphone Nó cung cấp nền tảng cho các hiệu ứng trực quan
và hoạt hình được sử dụng bởi Framework UIKit và cung cấp một giao diệnlập trình dựa trên Objective-C để tạo hoạt hình đặc biệt bên trong ứng dụngIphone
Trang 16OpenGL ES Framework: OpenGL for Embedded System (ES) là một phiên
bản nhỏ của OpenGL đầy đủ được thiết kế đặc biệt để dành cho các thiết bịnhỏ như Iphone
Iphone Audio Support: Cho phép IOS có khả năng hổ trợ các định dạng như
AAC, Apple Lossless (ALAC), A-law, IMA/ADPCM, Linear PCM,DVI/IntelIMA…
AV Foundation Framework: Là một Framework được thiết kế cho phép phát
lại, ghi âm, quản lý nội dung của âm thanh
Core Audio Frameworks (CoreAudio.Framework, Audio Toolbox.framework và AudioUnit.framework): Cung cấp khả năng truy cập
tới các thiết bị được tích hợp trong các đơn vị xử lý âm thanh
Open Audio Library (OpenAL): OpenAL là 1 công nghệ nền tảng lai tạo
được sử dụng để cung cấp hiệu ứng âm thanh 3D chất lượng cao
Media Player Framework: Framework này có thể chạy các video trong các
định dạng mov, mp4, m4v, 3gp tại một loạt các tiêu chuẩn nén,các độ phângiải và các tốc độ khung hình
1.2.5 Lớp Cocoa Touch (lớp tiếp xúc)
Lớp này nằm ở trên cùng trong ngăn xếp của IOS và chứa những Framework cái màđược sử dụng thường xuyên bởi các lập trình viên Iphone Cocoa Touch dựa trên nềntảng chuẩn của Cocoa API của MAC OS X và có phần mở rộng và sửa đổi để phù hợpvới Iphone Lớp Cocoa Touch cung cấp các Framework cho việc phát triển ứng dụngIphone như sau:
UIKit Framework: Đây là một Framework khổng lồ và một giao diện lập
trình dựa trên Objective-C giàu tính năng Chúng ta sẽ phải tốn nhiều thời gianlàm việc để tìm hiểu về nó Hầu hết các cuốn sách đều viết riêng về UIKitFramework Một số thành phần chính của UIKit là:
Quản lý và tạo giao diện người dùng (text fields, buttons, labels, colors,fonts…)
Trang 17 Quản lý chu kì sống của ứng dụng.
Điều khiển sự kiện ứng dụng (như chạm vào màn hình ứng dụng)
Các chức năng Cut, Copy, Paste
Quản lý và tình diễn nội dung Web và văn bản
Điều khiển dữ liệu
Tích hợp nhiều ứng dụng
Đưa ra thông báo
Bộ gia tốc, pin, cảm biến khoảng cách, camera và tương tác với thưviện hình ảnh
Map Kit Framework: Cung cấp cho chúng ta một giao diện lập trình để cho
phép chúng ta xây dựng bản đồ dựa trên các ứng dụng riêng của chúng ta Nócho phép chúng ta hiển thị bản đồ có thể cuộn tới bất kì vị trí nào, hiển thị bản
đồ tương ứng với vị trí địa lý hiện tại của thiết bị và chú thích theo nhiều cáchkhác nhau
Push Notification Service: Cho phép những ứng dụng cảnh báo người dùng
về một sự kiện thậm chí khi ứng dụng hiện tại không được chạy trên thiết bị
Nó rất phổ biến được sử dụng bởi các ứng dụng dựa trên tin tức Thông thườngkhi có tin tức mới thì dịch vụ sẽ tạo ra một tin nhắn trên thiết bị với tiêu đề củatin tức và cung cấp cho người dùng tùy chọn đề tài các ứng dụng tin tưởng ứng
để đọc thêm chi tiết Tính năng này lên được sử dụng tiết kiệm để tránh gâyphiền hà cho người sử dụng vì thương xuyên gián đoạn
Message UI Framework: Cung cấp mọi thứ mà chúng ta cần để cho phép
người sử dụng gửi email từ trong ứng dụng của chúng ta Trên thực tế nó còncung cấp các thành phần giao diện thông qua đó người dùng có thể nhập cácthông tin địa chỉ email và nội dung tin nhắn ngoài ra thông tin này có thể xácđịnh trước bên trong ứng dụng của chúng ta và sau đó được hiển thị cho người
sử dụng để chỉnh sửa và phên duyệt trước khi gửi
Address Book UI Framework: Đưa ra các chức năng chính cho IPhone như
là một thiết bị thông tin liên lạc và trợ giúp kỹ thuật số Toàn bộ Framework là
Trang 18giành riêng cho việc tích hợp các dữ liệu số địa chỉ vào trong ứng dụng riêngcủa chúng ta Cho phép chúng ta truy cập vào, hiển thị, chỉnh sửa và nhậpthông tin liên lạc từ sổ địa chỉ của IPhone từ bên trong ứng dụng riêng củachúng ta.
Game Kit Framework: Cung cấp kết nối ngang hàng (peer to peer) và kết nối
giọng nói giữa nhiều thiết bị và cho phép nhiều người sử dụng chạy cùng mộtứng dụng để tương tác
Trang 19CHƯƠNG 2: NGÔN NGỮ LẬP TRÌNH OBJECTIVE-C
Objective-C là ngôn ngữ lập trình hướng đối tượng Nó thêm cách gởi thông báo củangôn ngữ Smaltalk vào ngôn ngữ C Ngày nay Objective-C được dùng như ngôn ngữchính thức cho hệ điều hành Mac OS và IOS
2.1 Lịch sử phát triển ngôn ngữ Objective-C
Vào đầu những năm 1980, Brad J Cox đã thiết kế ra ngôn ngữ Objective-C dựatrên ngôn ngữ SmallTalk-80 Có thể hình dung rằng Objective-C là ngôn ngữ lập trìnhđược đặt ở lớp trên của ngôn ngữ lập trình C truyền thống, điều này có nghĩa rằng ngônngữ C được bổ sung thêm các thành phần mở rộng (extensions) để hình thành nên mộtngôn ngữ lập trình mới đó chính là Objective-C Ngôn ngữ Objective-C này cho phépchúng ta tạo và quản lý các đối tượng (Objects)
Từ năm 1988, Công ty NeXT Software nắm giữ bản quyền của ngôn ngữObjective-C này Họ đã phát triển các bộ thư viện và cả môi trường phát triển cho nó cótên là NEXTSTEP
Năm 1994, NeXT Computer phối hợp với Sun Microsystems chuẩn hóa lạiNEXTSTEP trong bản đặc tả tên là OPENSTEP Bản hiện thực của OPENSTEP chính làGNUStep Một hệ thống bao gồm cả Linux kenel và môi trường phát triển GNUStep lúc
đó được gọi là LinuxSTEP
Trang 20Đến năm cuối tháng 12 năm 1996, hãng Apple đã mua lại công ty NeXT Software
và môi trường NEXTSTEP/OPENSTEP đã trở thành thành phần cột lỗi của hệ điều hành
OS X mà Apple giới thiệu sau này Phiên bản chính thức của môi trường phát triển này
do Apple giới thiệu ban đầu có tên là Cocoa Bằng việc hỗ trợ sẵn ngôn ngữ Objective-C,đồng thời tích hợp một số công cụ phát triển khác như Project Builder (đây chính là tiềnthân của Xcode) và Interface Builder, Apple đã tạo ra một môi trường mạnh mẽ để pháttriển ứng dụng trên MAC OS X
Đến năm 2007, Apple tung ra bảng nâng cấp cho ngôn ngữ Objective-C và gọi đó
là Objective-C 2.0 Cho đến khi Apple chính thức giới thiệu iPhone vào năm 2007, cácrất rất nhiều các developers mong muốn được tham gia phát triển ứng dụng trên thiết bịmang tính cách mạng về công nghệ này Ban đầu, Apple không khuyến khích việc thamgia phát triển ứng dụng từ bên thứ ba này mà chỉ cho phép các ứng dụng chạy trên nềnweb được chạy thông qua ứng dụng dạng trình duyệt Safari mà họ cấy sẵn trong iPhone.Điều này làm cho các ứng dụng khi muốn chạy phải yêu cầu kết nối tới máy chủ webhost ứng dụng của các developers tham gia phát triển Rõ ràng động tác này của Applekhông thể đáp ứng nhu cầu của các developers cho có rất nhiều hạn chế trong việc pháttriển ứng dụng web-based như thế Ngay sau đó, Apple đã trấn an giới phát triển ứngdụng bằng việc chính thức thông báo rằng các developers sẽ có thể phát triển các ứngdụng thuần iPhone Tức là các ứng dụng nằm trong iPhone và chạy trên hệ điều hành củaiPhone giống như các ứng dụng có sẵn của Apple như Contacts, Stocks, Weather, chạytrên thiết bị đặc biệt này
Thật sự thì hệ điều hành iOS chính là 1 phiên bản đặc biệt của hệ điều hành MAC
OS X, điều này cho phép các developers có thể phát triển và kiểm thử ứng dụng của mìnhtrên các dòng máy tính như MacBook Pro, MacBook Air, Mac Mini, Và thực tế, Apple
đã nhanh chóng sau đó giới thiệu bộ công cụ phát triển ứng dụng mạnh mẽ (SoftwareDevelopment Kit - SDK) cho phép phát triển và kiểm thử ứng dụng trên iPhone một cáchnhanh chóng Bộ mô phỏng thiết bị iPhone của Apple, iPhone Simulator, cho phép
Trang 21developers có thể debug các ứng dụng của họ ngay trong môi trường phát triển mà khôngcần phải chạy thật trên các thiết bị iPhone và iPod Touch.
Đến năm 2010, với việc chính thức giới thiệu thêm thiết bị iPad, Apple chuyểnsang sử dụng thuật ngữ tổng quát hơn đó chính là iOS để chỉ hệ điều hành dùng trên cácthiết bị di động có thể có sự khác biệt về kích thước vật lý và độ phân giải như iPhone,iPod, iPad và các phiên bản khác nhau của chúng iOS SDK giờ đây sẽ cho phép cácdevelopers phát triển ứng dụng trên bất cứ thiết bị iOS này iOS 6 chính là phiên bản hiệntại của hệ điều hành đầy thú vị này
2.2 Tổng quan về Objective-C
Objective-C được thiết kế để phục vụ mục đích lập trình hướng đối tượng Nó hoạtđộng giống như là một tập hợp các thành phần mở rộng rất mạnh mẽ của ngôn ngữ C.Objective-C kết hợp với đặc điểm ưu tú nhất của C và ngôn ngữ SmallTalk Objective-Ckhá đơn giản để học và có đầy đủ các khả năng của một ngôn ngữ lập trình hướng đốitượng
Objective-C đơn giản và nhỏ gọn nhưng lại là một thành phần mở rộng rất mạnh
mẽ của ngôn ngữ chuẩn ANSI C Objective-C cung cấp đầy đủ các khả năng lập trìnhhướng đối tượng nhưng lại được thực thi theo cách khá đơn giản và dễ dàng
Hầu hết các ngôn ngữ lập trình hướng đối tượng cung cấp:
Một thư viện các Objects
Các công cụ phát triển cần thiết
Hổ trợ hướng đối tượng và các thư viện liên quan
Objective-C cũng cung cấp đầy đủ các thành phần trên Chúng ta có thể sử dụngObjective-C để phát triển một phần mềm hoàn thiện Apple đã chọn Objective-C làmngôn ngữ lập trình chính cho hệ thống máy Mac và iphone
Là ngôn ngữ hướng đối tượng nên Objective-C giải quyết các vấn đề lập trình dựatrên khái niệm các Objet Nó bao gồm 3 phần:
Trang 22 Interface: Interface của một lớp (class) thông thường được định nghĩa
trong file header với đuôi h Nó chính là phần khai báo của một lớp
Implementation: Mã nguồn của chương trình được viết trong phần
implementation của một lớp và được định nghĩa trong một file có đuôi m.Đây là phần định dạng nghĩa của lớp
Instantiation: Sau khi khai báo và định nghĩa một lớp, chúng ta có thể thực
thể hóa lớp này bằng việc cấp phát bộ nhớ cho new object của lớp đó
Tóm lại Objective-C là:
Thành phần mở rộng của ngôn ngữ lập trình C
Là ngôn ngữ lập trình hướng đối tượng đơn giản nhưng mạnh mẽ
Là ngôn ngữ được Apple sử dụng để phát triển các ứng dụng cho hệ thống máyMac và Iphone
Tại sao lại sử dụng Objective-C
Ngôn ngữ lập trình Objective-C được chọn cho Cocoa Framework vì một số lý do dauđây:
Nó là ngôn ngữ lập trình hướng đối tượng và các chức năng cung cấp bởi
Cocoa Framework chỉ có thể được mang lại bởi các kỹ thuật hướng đối tượng
Nó là thành phần mở rộng của chuẩn ANSI C vì vậy các chương trình viết bằng
C của Framework này sẽ không bị mất đi tính năng nào và người dùng đượchưởng các lợi thế của ngôn ngữ C
Với ngôn ngữ này, người dùng có thể lựa chọn cả lập trình hướng đối tượng vàlập trình thủ tục khi cần thiết
Nó đơn giản và dễ học bởi cú pháp của nó khá ngắn gọn nên có thể giúp cho lậptrình viên đạt được hiệu quả mong muốn mà không gặp nhiều khó khăn
Nó rất năng động nếu so sánh với các ngôn ngữ mở rộng khác dựa trên C Trìnhbiên dịch đóng một vai trò rất quan trọng trong việc bảo vệ thông tin liên quanđến các đối tượng để sử dụng lúc run time
Trang 23Nó là một ngôn ngữ mạnh bởi vì các quyết định có thể được đưa ra lúc biêndịch sẽ được trì hoãn cho tới khi chương trình chạy.
Sự năng động của Objective-C có hai lợi thế đáng kể:
Nó hổ trợ ràng buộc động và mở tạo ra một cấu trúc đơn giản đối với giaodiện tương tác người dùng
Nó cho phép phát triển các công cụ phức tạp Một giao diện cho hệ thốngrun time tạo điều kiện cho việc tiếp cận các thông tin run time giúp choviệc monitor ứng dụng viết bằng Objective-C
2.3 Các yếu tố căn bản của Ojective-C
2.3.1 Khai báo biến và cách sử dụng
Kiểu_dữ_liệu tên_biến = giá_trị_của_biến;
Trong đó “=”: lệnh gán giá trị cho biến
VD: int x ; hoặc int x = 10;
2.3.1.2 Quy tắc đặt tên
Quy tắc đặt tên biến:
Ngôn ngữ Objective-C có phân biệt hoa thường
Tên biến không có dấu tiếng việt
Trang 24Tên biến không có khoảng trắng.
Tên biến không được bắt đầu bằng số
Tên biến không được có các ký tự đặc biệt (ngoại trừ dấu gạch dưới _)Tên biến không được đặt trùng với các từ khoá của ngôn ngữ objective-
C VD: void, if, static,
2.3.1.3 Kiểu dữ liệu
Kiểu dữ liệu sẽ giúp trình biên dịch xác định được loại dữ liệu (số nguyên,
số thực, chuỗi,…) mà chúng ta muốn lưu trữ là gì từ đó sẽ cấp phát lượng
bộ nhớ tương ứng với loại dữ liệu mà chúng ta cần lưu trữ Objective-C hỗtrợ các kiểu dữ liệu cơ bản như sau:
Loại dữ liệu Tên kiểu Số ô nhớ Miền giá trị
long long 8 bytes -9,223,372,036,854,775,808 9,223,372,036,854,775,807
Số thực
double 8 bytes 0 1.7976931E+308Long double 16 bytes 0 1.1897315E+509
Bảng 2.1 Kiểu dữ liệu trong Objectived-C
2.3.1.4 Phép toán
Trang 25Nhân * A * B
Bảng 2.2 Các phép toán trong Objectived-C
Lưu ý: phép lấy phần dư chỉ được dùng trên 2 toán hạng kiểu số nguyên (nếu không sẽ
sinh lỗi cú pháp)
Ví dụ: 9 % 5 = 4
2.3.2 Từ khóa
2.3.2.1 Khai báo class, category và protocol
Một số từ khóa thông dụng trong Objective-C
@interface: Khai báo class hoặc interface.
@implementation: Định nghĩa class hoặc category.
@protocol: Khai báo protocol
@end: Kết thúc trong việc khai báo, định nghĩa category hoặc protocol.
@private: Giới hạn phạm vi trong lớp mà biến thể hiện được khai báo.
@protected: Giới hạn phạm vi trong lớp và lớp con kế thừa mà biến thể
hiện được khai báo
@public: không giới hạn phạm vi truy xuất.
@class: khai báo trước một tên lớp đã được định nghĩa ở một nơi khác.
@selector(method_name): Trả về một selector đã được biên dịch mà được
định nghĩa thông qua method_name
@protocol(protocol_name): Trả về một protocol protocol_name (một thể
hiện của một lớp Protocol) @protocol là hợp lệ (không có protocol_name)trong trường hợp khai báo trước
Trang 26@synchronized: Định nghĩa một block mã nguồn trong nó phải được thực
hiện đồng bộ
#import: Dùng để include một file, tương tự include trong C, C++.
2.3.2.2 Phạm vi truy xuất các 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 thể hiện được khai báo
@public: Không giới hạn phạm vi truy xuất
Mặc định là protected.
2.3.2.3 Xử lý ngoại lệ
Ngôn ngữ cũng hỗ trợ các cấu trúc try – catch – throw - finally giống như C++
@try - @catch - @throw - @finally cách thức sử dụng cũng hoàn toàn tương tự.
2.3.3 Câu lệnh trong Objective-C
Các câu lệnh điều khiển if, switch và các câu lệnh lặp for, while… tương tự như C/C++ hoặc Java
Lệnh If
Lệnh if
if (<condition>) {
Trang 29Trong đó
- Expression và constant là kiểu số nguyên
- Lệnh “break” thoát khỏi “switch”
Trang 302.3.5.1 Khởi tạo chuỗi
Đối với chuỗi trong Objective-C phải bắt đầu bằng @ VD: @“UIT”
Để kiểm tra giá trị của chuỗi ta dung hàm NSLog VD: NSLog(@“%@”,@“UIT”);
2.3.5.2 Đối tượng NSString
Cách khai báo:
NSString *Chuoi1;
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
Trang 31 substringFromIndex: Lấy ra 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ó có tồn tại trong chuỗi cho
trước hay 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.
2.3.6 Đối tượng
Objective-C cho phép định danh một đối tượng mà không cần phải chỉ ra một lớp
cụ thể của đối tượng đó, điều này cho phép định kiểu động
2.3.6.1 ID
Trong Objective-C, định danh đối tượng là một kiểu dữ liệu khác biệt: id Kiểu
này được định nghĩa như là một con trỏ trỏ đến một đối tượng, trong thực tế, mộtcon trỏ trỏ đến các biến thể hiện của một đối tượng, với dữ liệu duy nhất Giốngnhư hàm hoặc mảng trong C, một đối tượng được định danh bởi một địa chỉ Tất
cả các đối tượng, bất kể là biến thể hiện hay phương thức, đều có kiểu là id
id anObject;
2.3.6.2 Ép kiểu động
Những phương thức dưới đây dùng để kiểm tra kiểu
(BOOL) isKingOfClass: classObj >> đối tượng là hậu duệ hoặc thểhiện của classObj
Trang 32(BOOL) isMemberOfClass:classObj >> là một thành phần củaobjClass
(BOOL) respondsToSelector: selector >> đối tượng có phương thứcbởi selector
(BOOL) instancesRespondToSelector: selector >> đối tượng được tạobởi lớp có đáp ứng selector
(id) performSelector >> triệu gọi chính sách selector trên đối tượng
2.3.6.3 Quản lý bộ nhớ
Nguyên tắc cơ bản
Khi chúng ta nắm quyền sở hữu một đối tượng, khởi tạo đối tượng bằngcác phương thức mà trong tên bắt đầu với với alloc hoặc new hoặc copy(ví dụ, alloc, newObject hoặc mutableCopy…) hoặc gửi một thông điệpretain, chúng ta phải có trách nhiệm giải phóng quyền sở hữu đối tượng đóbằng cách sử dụng release hoặc autorelease Bất kỳ khi nào chúng ta nhậnđược một đối tượng (không phải tự mình khởi tạo), chúng ta không đượcrelease nó
Các object trong Objective-C là reference counted (tham chiếu đếm)
Các object bắt đầu với reference là 1.
Tăng reference với method retain.
Giảm reference với method release, autorelease.
Khi số lượng reference là 0, runtime (trình biên dịch) sẽ gọi method dealloc.
Khi chúng ta nắm quyền sở hữu một object, khởi tạo object bằng các method
mà trong tên bắt đầu với “alloc”, “new” hoặc “copy” (ví dụ, alloc,
allocWithZone, newObject hoặc mutableCopy…) hoặc gửi một message retain, chúng ta phải có trách nhiệm giải phóng quyền sở hữu object đó bằng
Trang 33cách sử dụng release hoặc autorelease Bất kỳ khi nào chúng ta nhận được
một object (không phải tự mình khởi tạo), chúng ta không được release nó
Từ iOS 4.3 về sau đã hỗ trợ quản lý bộ nhớ tự động (ARC) với garbage collector ARC thực sự giúp developer dễ dàng loại bỏ memory leaks(thất thoát bộ nhớ)
2.3.7 Lớp
2.3.7.1 Định nghĩa lớp
Một lớp trong Objective-C được định nghĩa gồm 2 file thành phần tương tự C,C++ Một file *.h định nghĩa trước các biến thành phần và tên các phương thức,file *.m định nghĩa phần thực thi cho các phương thức trong file *.h
File ClassName.h
#import <headerFile.h>
@interface ClassName {variable1 declaration;
variable2 declaration;
}method1 declaration;
method2 declaration;
@end
Objective-C sử dụng từ khóa @interface để khai báo một tên lớp trong file
h Từ khóa @end được sử dụng ở cuối phần khai báo
File ClassName.m
#import “ClassName.h”
@implementation ClassName-method 1 //triển khai phương thức 1
Trang 34-method 2 // triển khai phương thức 2
@end
Objective-C sử dụng từ khóa @implementation để khai báo phần thực thi
thực sự của lớp trong file m Từ khóa @end được sử dụng ở cuối phần khaibáo
2.3.7.2 Phương thức
Class method
Ký hiệu dấu +
Truy xuất thông qua tên lớp
Không thể truy cập vào các biến thể hiện (Instance variables)
Instance method
Ký hiệu dấu
- Truy xuất thông qua đối tượng
Khai báo phương thức
-/+ (return_type) method;
-/+ (return_type) methodPara1 : (type) para1;
-/+ (return_type) methodPara1 : (type) para1 andPara2: (type) para2;
Gọi phương thức
// Class method
MyClass *myClass = [MyClass method];
// Instance method
Trang 35var2 = b;
} return self;
}
Lời gọi phương thức như sau
[myClassObject constructor: 100 : 200];
2.3.7.3 Kế thừa
Tương tự như các ngôn ngữ khác như C++,…
Trong Objective-C, root class của tất cả các class là NSObject
Ví dụ: Class Teacher kế thừa từ lớp Person
Trang 362.3.8 Properties
Trong Objective-C hỗ trợ tính năng Properties, cho phép chúng ta định nghĩacá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;
retain: Thường được sử dụng cho đối tượng
copy: Tạo một bản sao của đối tượng, được sử dụng cho đối tượng chỉ
định
atomic (default): Thực hiện đồng bộ hoá
nonatomic: Ngược với atomic
Trang 37Hình 2.1 So sánh atomic và noautomic
2.3.9 Category
Khi ta muốn thêm một số phương thức vào một lớp có sẵn, thông thường ta sẽ mởrộng lớp đó bằng cách viết lại mã nguồn Objective-C cung cấp tính năng Categorycho phép:
Mở rộng lớp mà không cần phải viết lại mã nguồn của lớp cũ
Mở rộng lớp cũ trong một bộ thực thi khác
Thêm một phương thức newMethod cho lớp MyClass thông qua Category
Trang 38Chú ý:
Tên của Category là duy nhất (Không được trùng)
Trong Category không cho phép thêm các biển thể hiện
Có thể sử dụng category tạo ra các phương thức private nếu cần
2.3.10 Protocol
Protocol định nghĩa một danh sách các phương thức bắt buộc hoặc tùy chọn màcác lớp chấp nhận (adopt) protocol bắt buộc phải thực thi
Các method khai báo trong protocol cũng có thể là các khai báo property Các
từ khóa @optional và @required thể hiện theo đúng ý nghĩa của nó, nếu không
sử dụng từ khóa thì mặc định là @required
Protocol được sử dụng trong các trường hợp:
Khai báo các method dự kiến sẽ được thực thi
Khai báo một interface cho một object trong khi ẩn đi class của nó
Khảo sát tương đồng giữa các class mà không phải liên quan đến cấu trúcthứ bậc
2.3.11 Selector
Selector trong Objective-C có 02 ý nghĩa:
Trang 39 Chỉ đến tên của một phương thức khi nó được sử dụng trong mã nguồn mộtthông điệp gởi đến một đối tượng
Chỉ đến một định danh duy nhất mà thay thế cho một tên khi mã nguồnđược biên dịch
Selector khi được biên dịch có kiểu là SEL Tất cả các phương thức có cùng tên
thì có cùng selector Ta có thể sử dụng một selector để triệu gọi một phươngthức trên một đối tượng, điều này thể hiện khá căn bản mẫu thiết kế target-actiontrong Cocoa
SEL setWidthHeight;
setWidthHeight = @selector(setWidth:Height:);
Chỉ thị @selector cho phép ta tham chiếu đến một selector được biên dịch
hơn là tên một phương thức đầy đủ Đoạn mã trên là một selector cho
phương thức setWidth:Height được assign cho biến SEL là
setWidthHeight
Ba phương thức performSelector:, performSelector:withObject:, và performSelector:withObject:withObject:, định nghĩa trong protocol NSObject lấy các định danh SEL như là các tham số khởi tạo Tất cả các
phương thức này ánh xạ trực tiếp vào thông điệp phương thức
Ví dụ:
[friend performSelector:@selector(gossipAbout:) withObject:aNeighbor];
Tương đương với
[friend gossipAbout:aNeighbor];
2.3.12 Association References
Sử dụng tham chiếu liên kết để giả lập việc bổ sung các biến thể hiện đối tượngvào một đối tượng khác