Các thành phần của hệ điều hành IOS : Các tiến trình Processes: Là những tuyến riêng lẻ kết hợp với dữ liệu để thực hiện những tác vụ, như duy trì hệ thống, chuyển mạch gói dữ liệu, thự
Trang 1Em xin chân thành cảm ơn thầy!
Em xin cảm ơn những người bạn và gia đình đã nhiệt tình giúp đỡ, động viên em học tập, phấn đấu và vượt qua những khó khăn trong suốt năm năm học tập và rèn luyện tại Trường Đại học Công nghệ Thông tin và Truyền thông
Cuối cùng, em xin cảm ơn tất cả các thầy cô giáo Trường Đại học Công nghệ Thông tin và Truyền thông, đã dạy dỗ, chỉ bảo những kiến thức, tri thức khoa học và những bài học kinh nghiệm trong cuộc sống trong suốt quá trình học tập, rèn luyện tại Nhà trường, để em có đầy đủ kiến thức và hành trang bước vào cuộc sống
Trong quá trình thực hiện đề tài chắc chắn còn nhiều thiếu sót mà bản thân
em chưa thể rút ra được Em rất mong nhận được sự quan tâm, đóng góp của thầy
cô giáo và bạn bè
Em xin chân thành cảm ơn!
Sinh viênVương Văn Huy
Trang 2LỜI CAM ĐOAN
Đề tài của em được thực hiện trên cơ sở những kiến thức đã tích lũy được trong quá trình học tập, sự giúp đỡ tận tình của thầy cô, bạn bè cùng với một số tài liệu quý báu mà em sưu tầm được cũng như kho tàng tri thức Internet vô tận
Em xin cam đoan không sao chép nguyên bản bất cứ một đồ án tốt nghiệp hay đề tài nghiên cứu khoa học nào của bất kỳ ai Nếu sai, em xin hoàn toàn chịu trách nhiệm trước mọi kỷ luật của trường đề ra
Sinh viênVương Văn Huy
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC HÌNH ẢNH 5
MỞ ĐẦU 7
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 9
1.1 Mô tả bài toán 9
1.2 Đặt vấn đề 9
1.3 Phương pháp tiếp cận vấn đề 10
1.4 Cơ sở lý thuyết 11
1.4.1 Ios là gì? 11
1.4.2 Lịch sử hệ điều hành IOS 11
1.4.3 Kiến trúc của IOS 12
1.5 Ngôn Ngữ swift 24
1.5.1 Giới thiệu: 24
1.5.2 Cơ bản về Swift 25
1.5.3 Toán tử cơ bản 28
1.5.4 Kiểu String and Kiểu Character 31
1.5.5 Collection Type 32
1.5.6 Control Flow 32
1.5.7 Function 33
1.5.8 Method 33
CHƯƠNG 2: KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ HỆ THỐNG 34
2.1 Khảo sát nhu cầu 34
Trang 42.2 Kiến trúc hệ thống 35
2.3 Phân tích hệ thống 37
2.3.1 Xác định các tác nhân 37
2.3.2 Các tác nhân của hệ thống 37
2.3.3 Sơ đồ chức năng của hệ thống 38
2.4 Thiết kế cơ sở dữ liệu 42
2.4.1 Biểu đồ lớp 42
2.4.2 Danh mục các bảng trong cơ sở dữ liệu 43
2.5 Biểu đồ trạng thái 44
2.6 Biều đồ trình tự 46
2.7 Thiết kế giao diện 48
CHƯƠNG 3: XÂY DỰNG VÀ CÀI ĐẶT CHƯƠNG TRÌNH 49
3.1 Công nghệ và công cụ 49
3.2 Cài đặt và xây dựng chương trình 49
3.2.1 Cài đặt CocoaPods trên Mac và thêm thư viện HTMLReader 49
3.2.2 Get và Post dữ liệu từ server 50
3.3 Một số hình ảnh giao diện của chương trình 55
KẾT LUẬN 62
TÀI LIỆU THAM KHẢO 64
Trang 5DANH MỤC HÌNH ẢNH
Hình 1.1 Kiến trúc hệ điều hành IOS 12
Hình 1.2 Region và Subregions 14
Hình 1.3 Các trạng thái của một tiến trình IOS 16
Hình 1.4 Sự phân mảnh bộ nhớ 19
Hình 1.5 Kiến trúc hệ điều hành iPhone 22
Hình 1.6 Ảnh demo ứng dụng swift 24
Hình 2.1 Số lượng người sử dụng Smartphone 34
Hình 2.2: Sơ đồ mô tả kiến trúc hệ thống 35
Hình 2.3: Sơ đồ mô tả quá trình lấy dữ liệu từ Server 36
Hình 2.4 Biểu đồ Use Case tổng quát 38
Hình 2.5 Biểu đồ UC chức năng Khởi tạo 39
Hình 2.6 Biểu đồ UC chức năng Tra cứu thông tin xe ô tô 39
Hình 2.7 Biểu đồ UC chức năng Xem biển xe cơ giới 40
Hình 2.8 Biểu đồ UC chức năng Xem giới thiệu 41
Hình 2.9 : Sơ đồ lớp ứng dụng 42
Hình 2.10 : Sơ đồ lớp dữ liệu 43
Hình 2.11 Biểu đồ trang thái UC khởi tạo ứng dụng 44
Hình 2.12 Biểu đồ trạng thái UC Tra cứu thông tin xe ô tô 45
Hình 2.13 Biểu đồ trạng thái UC Xem biển xe cơ giới 45
Hình 2.14 Biểu đồ trạng thái UC Giới thiệu 46
Hình 2.15 Biểu đồ trình tự UC khởi tạo ứng dụng 46
Hình 2.16 Biểu đồ trình tự UC Tra cứu thông tin xe ô tô 47
Hình 2.17 Biểu đồ trình tự UC Xem biển xe cơ giới 47
Hình 2.18 Biểu đồ trình tự UC Giới thiệu 48
Hình 3.1 Giao diện đầu tiên khi truy cập chương trình 55
Hình 3.2 Giao diện Xem biển xe cơ giới 56
Trang 6Hình 3.3 Giao diện chọn mục Biển Dân Sự và tìm kiếm theo số hoặc theo tỉnh57Hình 3.4 Giao diện chọn mục Biển Bộ Quốc Phòng và tìm kiếm theo tên cơ quan hoặc
ký hiệu 58Hình 3.5 Giao diện chọn mục Biển Ngoại Giao và tìm kiếm theo quốc gia hoặc theo số 59Hình 3.6 Giao diện chọn muc Biển số 80 60Hình 3.7 Giao diện chọn mục Giới thiệu 61
Trang 7MỞ ĐẦU Tổng quan về đề tài
Điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo thời gian, số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di động ngày càng tăng Cùng với sự phát triển của số lượng thuê bao di động Ngày nay, điện thoại di động không chỉ còn mang chức năng nghe gọi nhắn tin thông thường mà còn là một thiết bị giải trí, học tập tra cứu thông tin rất tiện lợi Do đó, xây dựng các ứng dụng cho điện thoại di động đang là một yêu cầu tất yếu trong xu thế hiện nay
Lí do chọn đề tài
Xu hướng người sử dụng điện thoại với mục đích giải trí ngày càng tăng, như: nghe nhạc, xem phim, chơi game, chat, tra cứu…Nhằm đáp ứng nhu cầu người dùng, em muốn xây dựng ứng dụng tra cứu biển số xe ô tô tại Việt Nam trên điện thoại di động, ứng dụng sẽ rất tiện ích, mặc dù dữ liệu tìm được chỉ là những thông tin cơ bẳn, nhưng rất hứu ích Chẳng hạn, khi đang đi tìm mua ô tô cũ
và xem giấy tờ xe Để biết chắc giấy tờ đó có phải là thật không hay giả thì tra cứu
sẽ biết ngoài rà còn biết biển số xe ở đâu, nước nào, biển loại gì?
Mục đích của đề tài
Với ý tưởng sử dụng Xcode với ngôn ngữ lập trình Swift vào phát triển phần mềm, thực tập tốt nghiệp này trình bày quá trình xây dựng ứng dụng tra cứu biển số xe ô tô tại Việt Nam để giúp ích cho người dùng có thể tra cứu thông tin mọi lúc, mọi nơi
Qua đây giúp cho em hiểu rõ hơn được về lập trình IOS cụ thể là ngôn ngữ Swift Có thể vận dụng ngôn ngữ vào làm nhiều phần mềm bằng cho thiết bị di động sử dụng hệ diều hành IOS hơn nữa
Mặc dù đã rất cố gắng vận dụng các kiến thức tổng hợp để xây dựng chương trình nhưng với kinh nghiệm còn thiếu nên không thể tránh khỏi những
Trang 8thiếu sót Em rất mong được sự giúp đỡ của thầy cô và các bạn để em có thể hoàn thành tốt hơn bài thực tập của của mình.
Đề tài: “ Xây dựng ứng dụng tra cứu biển số xe ô tô tại Việt Nam cho thiết bị di động trên hệ điều hành IOS” Báo cáo đồ án tốt nghiệp này gồm có
các nội dung sau:
Chương 1: Cơ sở lí thuyết
Chương 2: Phân tích và thiết kế hệ thống
Chương 3: Xây dựng và cài đặt chương trình
Em xin chân thành cảm ơn
Trang 9 CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
Mô tả bài toán
Tên đề tài : Xây dựng ứng dụng tra cứu biển số xe ô tô tại Việt Nam cho thiết bị di động trên hệ điều hành IOS.
Nội dung bài toán đặt ra yêu cầu xây dựng một hệ thống đáp ứng chức năng của một kho ứng dụng cho di động gồm :
Một ứng dụng cho phép người dùng có thể tra cứu những thông tin cơ bản của một chiếc xe ô tô, và còn có thể xem các biển xe cơ giới ở Việt Nam
Một ứng dụng cài đặt trên thiết bị di động cho phép người dùng sử dụng thiết bị di động chạy hệ điều hành IOS truy cập vào kho ứng dụng và tải về miễn phí ứng dụng hoặc thanh toán qua cổng thanh toán đối với các ứng dụng trả phí
Tích hợp cổng thanh toán quốc tế paypal vào hệ thống để thực hiện nghiệp vụ thanh toán trong quá trình người dùng mua ứng dụng có phí Paypal là phương tiện thanh toán phổ biến nhất thế giới hiện nay, đáp ứng nhu cầu thanh toán của hầu hết các quốc gia trong đó có Việt Nam
Đặt vấn đề
Hiện nay thế giới đã bước vào thời kì phát triển mạnh mẽ của các thiết bị điện thoại thông minh, máy tính bảng Các nền tảng mới ra đời và ngày càng khẳng định là yếu tố quyết định cho sự thành công của các thiết bị thông minh mà ta phải
kể đến như Android, IOS và cả Windows Phone
Hiện nay thủ đoạn làm giả giấy tờ tinh vi để chiếm đoạt tài sản của các chủ
ô tô Các giấy tờ giả này rất khó phát hiện bằng mắt thường nếu không qua giám định , rât nhiều người đã bị lừa do không có thông tin về chiêc xe như nào, nó đã kiểm đinh hay chưa , giấy tờ có chính xác hay không Mọi người rất muốn kiểm tra nhưng không biết kiểm tra thế nào Nhưng rất may là bây giờ mọi người có thế kiểm tra các thông tin của một chiếc xe đã kiểm định hay chưa giấy tờ đúng vói xe
Trang 10hay không ở trang kiểm định của cục đăng kiểm Do để thuận tiện hơn cho người dùng cần xây dụng một ứng dụng để đáp ứng nhu cầu đó:
Vì vậy đề tài: Xây dựng ứng dụng tra cứu biển số xe ô tô ở Việt Nam hướng đến mục tiêu sau:
Hỗ trợ hệ điều hành IOS
Ứng dụng có thể chạy trên các thiết bị của Apple như iphone, Ipad
Tạo ra một ứng dụng dễ sử dụng đơn giản, phù hợp với lợi ích người dùng
Giúp người dùng có xem những thông tin cơ bản của một chiếc xe ô tô , ngoài ra còn có thể tra thêm xe ô tô ở tỉnh nào, thuộc quân đội hay của nước ngoai
Phương pháp tiếp cận vấn đề
Xây dựng kho ứng dụng trên nền tảng IOS
Hiện nay có rất nhiều nền tảng cho di động như IOS của Apple, Android của Google, Windows Phone7 của Microsoft, Bada của SamSung, Symbian của Nokia… vì vậy số lượng ứng dụng cũng rất phong phú Việc lựa chọn để xây dựng kho ứng dụng cho thiết bị nào, cho nền tảng nào cũng rất khó khăn và phải có hướng đi đúng đắn
Nhìn chung, dù là iOS hay Android, người dùng hiện nay đều có xu hướng lựa chọn theo cảm tính, hay nói cách khác là lựa chọn hệ điều hành mà mình cảm thấy quen thuộc và dễ sử dụng nhất Nhưng theo tôi lựa chọn hệ điều hành IOS vì những lý do sau:
iOS luôn luôn hoạt động hiệu quả : Có thể nói, Apple không chỉ nổi tiếng
bởi iPhone, iPad và iPod, mà bản thân hệ điều hành iOS cũng đóng góp một phần không nhỏ tạo nên danh tiếng của quả táo cắn dở Do đó, iOS được Apple vô cùng chăm chút và hoạt động hiệu quả với mức độ tin cậy cao hơn bất cứ hệ điều hành nào khác Không giống các ứng dụng trên Android, các ứng dụng của iOS chạy độc lập với hệ điều hành, điều đó có nghĩa nếu một ứng dụng gặp lỗi và bị hiện tượng "crash", điện thoại của bạn vẫn hoạt động bình thường - việc bạn cần làm chỉ là khởi động lại ứng dụng đó Ngược lại, với Android, nếu một ứng dụng bị lỗi,
Trang 11toàn bộ điện thoại cũng bị sập theo, buộc bạn phải khởi động lại máy.
Ứng dụng của iOS chất lượng hơn và cập nhật nhanh hơn: Mặc dù hầu
hết cả nhà phát triển đều xây dựng các ứng dụng cho cả hai phiên bản iOS và Android, song thường họ sẽ ưu tiên iOS trước, bởi phát triển ứng dụng cho iOS dễ hơn so với Android Android là hệ điều hành có mã nguồn mở và có rất nhiều phiên bản khác nhau Do đó, hầu hết các smartphone chạy Android hiện nay đều không được cài phiên bản mới nhất, điều đó khiến việc phát triển các ứng dụng trở nên phức tạp và khó khăn hơn iOS, ngược lại, đều vô cùng nhất quán trên tất cả các thiết bị của Apple, và do đó việc cập nhật phiên bản mới đều nhanh gọn và dễ dàng hơn so với Android Nếu sở hữu một thiết bị cấp cao của Apple, bạn có thể
an tâm máy của bạn bao giờ cũng cập nhật bản mới nhất của hệ điều hàn
iOS an toàn hơn: Có hai lý do để đi đến kết luận iOS có độ bảo mật và an
toàn tốt hơn tất cả các hệ điều hành khác hiện nay, bao gồm cả Android Thứ nhất
và quan trọng nhất, các nhân viên của Apple đều tự tay kiểm tra và xác nhận từng ứng dụng được đưa lên iOS App Store trước khi chuyển chúng đến tay người dùng Thứ hai, Apple đưa ra những những hạn chế vô cùng nghiêm ngặt nhằm ngăn chặn những ứng dụng có khả năng thâm nhập trực tiếp vào hệ điều hành, điều
đó giúp ngăn chặn tất cả những virus hay phần mềm độc hại có thể nhiễm vào hệ điều hành Apple cũng giúp người dùng có thể kiểm tra xem thiết bị của họ ở đâu trong trường hợp bị kẻ gian đánh cắp, đồng thời kẻ gian cũng không thể tắt hệ thống GPS tracker giúp định vị vị trí máy nếu không có mật khẩu của bạn
Cơ sở lý thuyết
Ios là gì?
IOS viết tắt của từ Internetwork Operating System, làhệ điều hành trên các thiết bị di độngcủaApple Ban đầu hệ điều hành này chỉ được phát triển để chạy trêniPhone(gọi là iPhone OS), nhưng sau đó nó đã được mở rộng để chạy trên các thiết bị của Apple nhưiPod touch,iPadvà Apple TV
Lịch sử hệ điều hành IOS
Trang 12Hệ đ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 1 nă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ột cái tên riêng nên chỉ đơn giản là "iPhone chạy OS X" Ban đầu, ứng dụng bên thứ ba không được hỗ trợ Steve Jobs đã 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 17 tháng 10 năm 2007, Apple thông báo một bộ phát triển phần mềm đang được xây dựng và họ dự định sẽ đưa nó đến "tay của 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ều hành, đó là "iPhone OS".
Khi chiếc iPhone đầu tiên được công bố, Apple đã khẳng định rằng nó chạy trên cùng một nhân Unix giống như hệ điều hành Mac OS và cả hai có thể sử dụng nhiều công cụ chung nhau Mặc dù có một vài điểm chung giữa Mac OS và iOS nhưng cũng có một số khác biết cơ bản giữa chúng Khi chiếc iPhone đầu tiên được bán ra, hệ điều hành của nó được gọi với cái tên là “iPhone OS” và giữ cái tên này trong 4 năm và đổi tên thành iOS sau khi ra phiên bản iOS 4 vào tháng 6 năm 2010 Để đơn giản và thân thuộc hơn với mọi người, trong bài viết này, ta sẽ chỉ gọi hệ điều hành của chiếc iPhone là iOS với tất cả mọi phiên bản
Kiến trúc của IOS
Tổng quan về kiến trúc của IOS
Khi mà lợi ích của việc định tuyến qua mạng trở nên phát triển, đòi hỏi router phải hỗ trợ một số những giao thức và cung cấp những chức năng khác, như cầu nối giữa các mạng Cisco đã thêm những tính năng mới cho phần mềm của router.Kết quả có nhiều chức năng cầu nối và định tuyến như ngày nay Nhưng hầu như cấu trúc cơ bản của hệ điều hành vẫn giống như ban đầu.IOS là một cấu trúc đơn giản, nhỏ, được thiết kế dựa vào những ràng buộc về bộ nhớ, về tốc độ, phần cứng của router
Trang 13Hình 1.1 Kiến trúc hệ điều hành IOS
Trang 14Các thành phần của hệ điều hành IOS :
Các tiến trình (Processes): Là những tuyến riêng lẻ kết hợp với dữ liệu để
thực hiện những tác vụ, như duy trì hệ thống, chuyển mạch gói dữ liệu, thực hiện giao thức định tuyến…
Nhân (Kernel): Cung cấp những dịch vụ cơ bản của hệ thống tùy thuộc vào
IOS như : quản lý bộ nhớ, lập lịch các tiến trình…Nó cung cấp quản lý tài nguyên phần cứng (CPU, bộ nhớ) cho các tiến trình
Bộ đệm gói (Packet buffer): Cung cấp các bộ đệm toàn cục và kết hợp với
chức năng quản lý bộ đệm để lưu trữ gói dữ liệu đang được chuyển mạch
Trình điều khiển thiết bị (Device driver): Làm chức năng điều khiển giao
tiếp giữa phần cứng và thiết bị ngoại vi, giao tiếp giữa các tiến trình IOS, kernel và phần cứng.Chúng cũng giao tiếp với phần mềm chuyển mạch nhanh (fast switching software)
Phần mềm chuyển mạch nhanh (Fast switching soft): Chức năng chuyển mạch gói dữ liệu cao
Tổ chức bộ nhớ
IOS ánh xạ toàn bộ bộ nhớ vật lý thành một không gian địa chỉ ảo rộng lớn MMU (Memory Map Unit) của CPU có giá trị khi được sử dụng để tạo không gian địa chỉ ảo thậm chí khi mà IOS không tận dụng một khối nhớ ảo trọn vẹn
Miền bộ nhớ (Memory region) :
IOS chia không gian địa chỉ này thành những miền bộ nhớ gọi là region, mỗi region phù hợp với những loại bộ nhớ vật lý khác nhau Ví dụ : SRAM có thể lưu trữ gói dữ liệu và DRAM có thể lưu trữ phần mềm hoặc dữ liệu Phân lớp bộ nhớ thành các region cho phép IOS phân loại các bộ nhớ khác nhau vì vậy mà phần mềm không cần biết chi tiết về bộ nhớ trên mỗi platform Các region được phân chia thành một trong tám mục như hình :
Trang 15Local(cục bộ) Thông thường lưu trữ cấu trúc dữ liệu lúc chạy và local
heap, thường là DRAM Lomem Bộ nhớ chia sẻ CPU và bộ điều khiển môi trường mạng
sử dụng thông qua một bus dữ liệu, thường là SRAM Fast Bộ nhớ truy xuất nhanh, như SRAM, sử dụng cho mục
đích đặc biệt và những tác vụ xem yêu cầu về tốc độ Itext Thực thi mã nguồn của iOS
Idata Các biên được khởi tạo
IBss Các biên không được khởi tạo
PCI Bộ nhớ bus CPI, được sử dụng bởi tất cả thiết bị trên các
bus PCI Flash Bộ nhớ flash dùng để lưu trữ iOS chạy từ RAM hoặc
iOS chạy từ flash, nó cũng có thể lưu trữ một bảng file(tập tin) cấu hình dự phòng và những dữ liệu khác.Thông thường thì file hệ thống được xây dựng ở miền bộ nhớ flash này
Vùng bộ nhớ (Memory pool):
IOS quản lý bộ nhớ rỗi thông qua một chuỗi các memory pool.Mỗi pool là một tập hợp các khối nhớ mà có thể cấp phát và thu hồi khi cần.Memory pool được xây dựng bên ngoài các region và được quản lý bởi kernel.Thường thì pool tương đương với một region đặc biệt
Trang 16Hình 1.2 Region và Subregions
Một memory pool có thể xây dựng từ một vài region mở rộng, cho phép bộ nhớ được cấp phát và thu hồi từ các miền bộ nhớ khác nhau để tối đa hiệu quả hoạt động, có thể dùng lệnh show memory để hiển thị các pool này: router#show memory Head Total(b) Used(b) Free(b) Lowest(b) Largest(b) Processor 61281540
7858880 3314128 4544752 4377808 4485428 I/O1A00000 6291456 1326936
4964520 4951276 4964476 PCI 4B000000 1048576 407320 641256 6412556
641212 … Mô tả như sau(kích thước tính theo byte):
- Total: kích thước của pool
- Used: lượng bộ nhớ được cấp phát
- Free: lượng bộ nhớ sẵn sằng để sử dụng
- Lowest: lượng bộ nhớ thấp nhất sẵn sàng sử dụng từ khi mà pool được tạo
- Largest: kích thước khối nhớ liên tục lớn nhất sẵn sàng sử dụng hiện tại
Trang 17Lệnh show memory ở trên cung cấp ba pool với các tham số tương ứng: heap, processor và I/O.
Tiến trình iOS(Processes iOS)
Vòng đời của một tiến trình:
Một tiến trình có thể được tạo ra hoặc kết thúc bất cứ lúc nào trong khi iOS đang hoạt động ngoại trừ có ngắt xảy ra.Nó được tạo ra bởi kernel hoặc bởi một tiến trình khác đang chạy khác Một thành phần có trách nhiệm tạo nhiều tiến trình trong iOS gọi là parser(bộ phân tách).Parser này là một tập các chức năng làm phiên dịch cấu hình iOS và dòng lệnh EXEC.Parser được yêu cầu bởi kernel trong suốt quá trình khởi tạo iOS và các tiến trình EXEC, để cung cấp một giao tiếp dòng lệnh CLI thông qua giao tiếp console (giao tiếp người và máy) và các phiên telnet.Tại bất cứ thời điểm nào, một lệnh được nhập bởi người dùng hoặc một cấu hình được đọc từ file,parser phiên dịch dòng lệnh và đưa ra những hoạt động tức thời.Một vài lệnh cấu hình bởi việc gán trị, như địa chỉ IP, trong khi cấu hình khác như định tuyến hoặc giám sát Một vài lệnh làm cho parser khởi tạo một tiến trình mới Ví dụ: khi mà lệnh cấu hình no router eigrp được nhập vào, parser khởi tạo một tiến trình mới, gọi là ipigrp (nếu như tiến trình ipigrp đã được khởi tạo rồi), bắt đầu xử lý gói ip EIGRP.Nếu như lệnh cấu hình no router eigrp được nhập vào, parser kết thúc tiến trình ipigrpvà không còn chức năng định tuyến EIGRP Tiến trình iOS trải qua các trạng thái như sau:
Trang 18Hình 1.3 Các trạng thái của một tiến trình IOS
Trạng thái khởi tạo (Create):
Khi mà một tiến trình mới được tạo, nó nhận vùng stack riêng của mình và vào trạng thái mới (new).Tiến trình có thể di chuyển đến trạng thái điều chỉnh (Modify).Nếu không có thay đổi cần thiết, thì tiến trình chuyển sang trạng thái thực thi (Execute)
Trạng thái điều chỉnh (Modify):
Không giống như hầu hết các hệ điều hành, iOS không tự động truyền tải các tham số khởi tạo hoặc gán một giao tiếp đến một tiến trình mới khi nó được tạo, bởi
vì nó cho rằng hầu hết các tiến trình không cần tài nguyên này.Nếu một tiến trình cần nguồn tại nguyên này, tuyến mà tạo nó có thể điều chỉnh để thêm vào
Trạng thái thức thi (Execute):
Sau khi một tiến trình mới được tạo thành công và điều chỉnh, nó chuyển sang trạng thái sẵn sàng (Ready) và vào trạng thái thực thi (Execute).Trong suốt
Trang 19trạng thái này, một tiến trình có thể truy cập CPU và chạy.Trong suốt trạng thái thực thi , một tiến trình có thể truy cập CPU và chạy.Trong suốt trạng thái thực thi , một tiến trình có thể là một trong 3 trạng thái: sẵn sàng, chạy và rỗi (Idle).Một tiến trình ở trạng thái sẵn sàng sẽ đợi chuyển sang trạng thái truy cập CPU và bắt đầu thực thi lệnh.Một tiến trình ở trạng thái rỗi là đang ngủ, đợi sự kiện bên ngoài xuất hiện trước khi nó có thể chạy.Một tiến trình chuyển từ trạng thái sẵn sàng sang trạng thái chạy khi mà nó được lập lịch để chạy Với đa tác vụ mà không ưu tiên (non-preemptive multitasking), một tiến trình được lập lịch chạy trên CPU cho đến khi tạm ngừng hoặc kết thúc.Một tiến trình có thể tạm dừng theo 2 cách: nó có thể tự dừng bởi việc báo cho kernel, nó muốn nhường cho CPU và chuyển sang trạng thái sẵn sàng, và đợi đến lúc chạy lại.Tiến trình cũng có thể dừng bởi một hoạt động bên ngoài xảy ra.Khi mà một tiến trình đợi một sự kiện, kernel hoàn toàn dừng tiến trình này và chuyển nó sang trạng thái rỗi.Sau khi một sự kiện xảy
ra rồi thì kernel chuyển tiến trình trở lại trạng thái sẵn sàng để đợi chạy lại
Trạng thái kết thúc (Terminal):
Trạng thái cuối cùng trong vòng đời của tiến trình là trạng thái kết thúc.Một tiến trình vào trạng thái kết thúc khi nó hoàn thành chức năng của mình và đóng lại hoặc khi một tiến trình khác đóng nó.Khi một tiến trình bị đóng hoặc tự đóng, tiến trình chuyển sang trạng thái chết (Dead).Tiến trình này ở trạng thái chết (không hoạt động) cho đến khi kernel thu hồi tất cả các tài nguyên của nó.Sau khi tài nguyên được thu hồi, tiến trình bị kết thúc thoát khỏi trạng thái chết và xóa khỏi hệ thống
Độ ưu tiên tiến trình iOS:
IOS thực hiện chế độ ưu tiên để lập lịch các tiến trình trên CPU.Tại thời điểm tạo, mỗi tiến trình được gán một trong 4 độ ưu tiên dựa trên mục đích của tiến trình.Độ ưu tiên là không đổi, chúng được gán khi một tiến trình được tạo và không bao giờ thay đổi.Các độ ưu tiên:
Critical: Dành riêng cho những tiến trình hệ thống thiết yếu mà giải quyết
Trang 20những vấn đề cấp phát tài nguyên
High: Được gán cho những tiến trình mà cung cấp đáp ứng nhanh, như tiến trình nhận gói trực tiếp từ giao tiếp mạng -Medium: Độ ưu tiên mặc định sử dụng bởi hầu hết các tiến trình
Low: Được gán cho những tiến trình cung cấp những tác vụ mang tính định
kỳ như bảng ghi lỗi… Độ ưu tiên các tiến trình cung cấp sự ưu đãi cho một vài tiến trình để truy cập CPU dựa trên sự quan trọng của nó đối với hệ thống và iOS không thực hiện quyền ưu tiên.Một tiến trình có sự ưu tiên cao hơn không thể ngắt một tiến trình có độ ưu tiên thấp hơn, thay vào đó, tiến trình có độ ưu tiên cao hơn thì có nhiều cơ hội hơn để truy cập CPU hơn
Kernel iOS
IOS Kernel không là một đơn vị mà là một tập các thành phần và chức năng lien kết chặt chẽ với nhau.iOS Kernel thực hiện các chức năng sau: Lập lịch tiến trình, quản lý bộ nhớ, cung cấp dịch vị retimes để trap (phát hiện) và handle (điều khiển) những ngắt phần cứng, duy trì timer (bộ định thời gian), và phát hiện ngoại
lệ phần mềm Các chức năng chính của Kernel:
Lập lịch:
Tác vụ lập lịch các tiến trình được thực hiện bởi scheduler (bộ lập lịch) Scheduler quản lý tất cả các tiến trình trong hệ thống bằng cách sử dụng một chuỗi các hang đợi tiến trình mô tả trạng thái của mỗi tiến trình.Các hàng đợi này chứa nội dung thông tin cho tiến trình ở trạng thái đó.Tiến trình chuyển từ trạng thái này sang trạng thái khác khi mà scheduler di chuyển ngữ cảnh từ 1 hàng đợi tiến trình này đến hàng đợi tiến trình khác
Quản lý bộ nhớ:
Bộ quản lý bộ nhớ của Kernel tại mức quá cao quản lý tất cả các vùng nhớ
có sẵn của iOS, bao gồm bộ nhớ chứa iOS của nó.Bộ quản lý bộ nhớ ba thành phần riêng biệt, với những nhiệm vụ riêng
Có ba bộ quản lý bộ nhớ sau:Bộ quản lý Region, Bộ quản lý Pool, Bộ quản
Trang 21lý Chunk
Bộ quản lý Region:
Định nghĩa và duy trì những region khác nhau trên một platform.Bộ quản lý region có chức năng duy trì tất cả các region.Nó cung cấp các dịch vụ cho phép những phần khác của iOS tạo region và gán các thuộc tính của chúng.Nó cũng cho phép những phần khác truy vấn những region có sẵn, ví dụ quyết định tổng lượng
Trang 22Bộ quản lý bộ nhớ được yêu cầu cho mỗi tiến trình sử dụng hàm hệ thống chuẩn malloc và free để lấy và trả bộ nhớ.Bộ quản lý bộ nhớ hoạt động bởi việc duy trì danh sách khối nhớ rỗi cho mỗi pool, ban đầu mỗi pool chứa chỉ một khối nhớ rỗi lớn bằng kích thước một pool.Khi bộ quản lý bộ nhớ pool yêu cầu bộ nhớ,khởi tạo những khối nhớ có kích thước nhỏ hơn.Tại cùng một thời điểm,các tiến trình có thể giải phóng vùng nhớ trả về pool, tạo thành một số vùng nhớ rối không liên tục nhau, nhiều kích thước, trường hợp này gọi là phân mảnh bộ nhớ
Quản lý Chunk:
Quản lý pool cung cấp nhiều cách hiệu quả để quản lý một tập hợp các khối
có kích thước khác nhau.Tuy nhiên những tính năng này có chi phí của nó, bộ quản lý pool tạ ra 32 byte overhead trên mỗi bộ nhớ.Mặc dù overhead này không quan trọng lắm đối với khối dữ liệu lớn, đối với pool có hàng ngàn khối dữ liệu nhỏ hơn thì overhead mới trở nên đáng quan tâm.Để tạo thêm sự lựa chọn thì kernel cung cấp bộ quản lý bộ nớ khác gọi là bộ quản lý bộ nhớ Chunk, nó có thể quản lý lượng lớn pool có nhiều khối nhớ nhỏ mà không có overhead.Không giống như quản lý pool, bộ quản lý Chunk không tạo ra danh sách vùng nhớ rỗi với kích thước khác nhau.Thay vào đó bộ quản lý chunk quản lý một tập các khối nhớ cố định được chỉ định từ một trong các vùng nhớ pool.Trong một vài trường hợp, bộ quản lý chunk có thể xem như là một bộ quản lý pool vùng nhớ con
Các chính sách thường được thực hiện là: Một tiến trình yêu cầu một vị trí của mooth khối nhớ từ một vùng nhớ pool đặc biệt.Một tiến trình sau đó gọi đến
bộ quản lý chunk để chia khối nhớ thành một chuỗi các chunk có kích thước cố định và nhỏ hơn,.Sử dụng bộ quản lý chunk để định vị ra những vùng nhớ rối khi cần.Thuận lợi là ổ đây chỉ có 32 byte overhead và bộ quản lý pool thì không bắt buộc cấp phát và lấy lại hàng ngàn phân mảnh nhỏ hơn.Vì vậy khả năng phân mảnh trong pool giảm đáng kể
Quản lý bộ đệm gói:
Trong định tuyến gói dữ liệu, bất cứ hoạt động lưu trữ hay chuyển dữ liệu
Trang 23đều phải cần có một nơi để lưu trữ dữ liệu trong khi dữ liệu đang được định tuyến trên đường truyền.Thông thường thì tạo ra một bộ đệm để lưu trữ các gói đến trong khi hoạt động chuyển mạch đang hoạt động.Bởi vì khả năng định tuyến gói là trung tâm của cấu trúc hệ điều hành iOS.iOS chứa thành phần chuyên biệt để quản
lý những vùng đệm này.Thành phần này được gọi là bộ quản lý vùng đệm bộ nhớ.iOS sử dụng thành phần này để tạo và quản lý nhất quán một chuỗi các vùng đệm cho chuyển mạch trên mỗi platform.Bộ đệm trong vùng này được biết chung
là những bộ đệm hệ thống.Bộ quản lý vùng bộ đệm cung cấp một cách tiện lợi để quản lý một tập các bộ đệm có kích thước cụ thể.Mặt dầu nó có thể được sử dụng
để quản lý bất cứ loại bộ đệm nào, bộ quản lý bộ đệm được sử dụng chính để quản
lý những vùng bộ đệm gói.Những vùng đệm gói được tạo từ các vùng nhớ pool có sẵn.Đểf tạo một vùng, bộ quản lý bộ đệm yêu cầu một khối nhớ từ bộ quản lý pool
và chia cho bộ đệm.Bộ quản lý bộ đệm gói sau đó tạo một danh sách cho tất cả các
bộ đệm rỗi và theo dõi các vùng nhớ này.Những vùng đệm có thể là động hay tĩnh, vùng bộ đệm tĩnh được tạo với số bộ đệm cố định, không thêm bộ đệm vào cùng bộ đệm tĩnh này.Vùng bộ đệm động được tạo với một số bộ đệm tối thiểu.Gọi là bộ đệm thường xuyên, có thể thêm hoặc xóa các bộ đệm.Với các vùng nhớ động , nếu bộ quản
lý bộ đệm nhận được yêu cầu khi vùng nhớ rỗng, nó cố gắng mở rộng vùng nhớ và đáp ứng yêu cầu ngay lập tức
Nếu nó không thể mở rộng vùng nhớ, thì yêu cầu bị lỗi và thực hiện mở rộng vùng nhớ sau đó.vùng bộ đệm được phân lớp public (dùng chung) hoặc private (dùng riêng)
Vùng public được sử dụng bởi bất cứ tiến trình nào của hệ thống
Private được tạo cho một tập các tiến trình sử dụng
Bộ đệm hệ thống: Mỗi iOS đều có một tập các bộ đệm public định trước gọi
là những bộ đệm hệ thống, những bộ đệm này được sử dụng cho tiến trình chuyển mạch các gói dữ liệu và tạo gói (như gói keepalive, gói cập nhật định tuyến)
Trình điều khiển thiết bị
Trang 24IOS chứa trình điều khiển thiết bị cho các thiết bị phần cứng, như flash card, NVRAM, nhưng đáng chú ý là trình điều khiển cho các giao tiếp mạng.Trình điều khiển các giao tiếp mạng cung cấp những khả năng chính cho hoạt động của gói dữ liệu tại đầu ra của giao tiếp.
Mỗi thiết bị chứa hai thành phần chính: thành phần điều khiển và thành phần dữ liệu Thành phần điều khiển có trách nhiệm quản lý tình trạng và trạng thái của thiết bị (ví dụ: shutdown trên một cổng) Thành phần dữ liệu có trách nhiệm đối với tất cả các luồng hoạt động chuyển mạch gói dữ liệu Trình điều khiển thiết bị có quan hệ chặt chẽ với chức năng chuyển mạch gói Trình điều khiển thiết bị giao tiếp mạng dựa trên hệ thống iOS thông qua một cấu trúc điều khiển đặc biệt gọi là IDB (interface descriptor block) IDB chứa toàn bộ chức năng điều khiển thiết bị, dữ liệu, trạng thái thiết bị Ví dụ: địa chỉ IP,trạng thái cổng, thống kê gói là một trong các trường hiện tại trong IDB.iOS duy trì một IDB cho mỗi giao tiếp hiện tại trên một platform *Cấu trúc chuyển mạch gói: Chuyển mạch gói là một trong các chức năng quan trọng nhất của router, hoạt động bao quát như sau: - Một gói đến một cổng - Địa chỉ đích của gói được kiểm tra và so sánh dựa vào danh sách đích đã biết - Nếu phù hớp, gói được chuyển tiếp ra cổng phù hợp
- Nếu không phù hợp, gói bị hủy.Rõ ràng vấn đề chuyển mạch không quá phức tạp, nhưng để chuyển mạch được nhanh thì vấn đề trở nên phức tạp.Tốc độ hoạt động không chỉ dựa vào tốc độ CPU, còn có những nhân tố khác, khẳ năng thực thi của bus I/O tốc độ bộ nhớ đều có ảnh hưởng đến sự thực thi của chuyển mạch.Đây là một thử thách lớn đối với các nhà phát triển iOS.Làm thế nào để tốc độ chuyển mạch nhanh nhất mà có thể giới hạn trên các thành phần CPU, bộ nhớ, bus I/O.Khi
mà kích thước và số mạng định tuyến tăng lên, những người phát triển iOS tiếp tục tìm ra những cách tốt nhất để giải quyết thử thách thực thi này
Đầu tiên thì iOS chỉ có chức năng chuyển mạch nhưng đã được cải thiện về sau, một vài phương thức chuyển mạch dựa trên nhiều platform khác nhau.Ngày nay iOS có thể chuyển mạch tới vài trăm ngàn gói trên một giây, sử dụng bạn định
Trang 25tuyến tới vài trăm ngàn tuyến đi.
Kiến trúc của hệ điều hành iPhone
Bao gồm các lớp sau :
Hình 1.5 Kiến trúc hệ điều hành iPhone
Các lớp dưới cùng là nền tảng của hệ điều hành, phụ trách quản lý bộ nhớ, các file hệ thống, mạng, các hệ điều hành nhiệm vụ và tương tác trực tiếp với các phần cứng
Lớp Core OS : Lớp Core OS bao gồm các thành phần : OS X Kernel
Match 3.0 BSD Sockets Security Power Management Key chain Certifi cates File System -Bonjour
-Lớp Core Services : -Lớp Core Services cung cấp một trừu tượng trên các
dịch vụ được cung cấp trong lớp OS X Kernel.Nó cung cấp truy cập cơ bản để các dịch vụ hệ điều hành iPhone và bao gồm các thành phần sau : -Collection -AddressBook -Networking
Files Access
SQLite -Core Location -Net Services -Threading -Preferences -URL Utilities
Trang 26Lớp Media(Truyền thông) : Lớp Media cung cấp các dịch vụ đa phương
tiện mà bạn có thể sử dụng trong iPhone và iPad.Nó bao gồm các thành phần sau:
Core Animation -OpenGL ES
Lớp Cocoa Touch : Lớp Coscoa Touch cung cấp một lớp trừu tượng để
khai báo các thư viện khác nhau cho các lập trình iPhone và iPad, như sau:
Trang 27sẽ giúp các nhà phát triển dễ dàng tạo nên những ứng dụng cho nền tảng iOS và
OS X nhờ cách thức tương tác với giao diện lập trình mới trực quan
Ngôn ngữ lập trình Swift giống với Objective C, nhưng phương thức hoạt động đơn giản hơn Hơn nữa, Objective C hiện vẫn đang rất được ưa chuộng hiện nay, việc này cũng sẽ dễ dàng hơn cho đa số cácnhà phát triển ứng dụng Đặc biệt, các nhà phát triển cũng có thể sử dụng các công cụ của Objective C ngay chính trên Swift
Được xem như một phần của Xcode 6 IDE (hiện đang được Apple phát hành dưới dạng beta), Swift cũng là một ngôn ngữ cho giao diện lập trình Cocoa
và Cocoa Touch cho hệ điều hành OS X cho máy tính và iOS cho di động
Craig Federighi, phụ trách cao cấp mảng phần mềm của Apple cho biết rằng, Swift mang lại một giao diện lập trình hiện đại, nhanh chóng Ngôn ngữ lập trình này được thiết kế tối ưu cho sự an toàn, cho phép lập trình viên có thể tương tác và phát triển ứng dụng với một cách thức chưa bao giờ có trước đây
Hình 1.6 Ảnh demo ứng dụng swift
Trang 28Việc lập trình với Swift cũng trực quan hơn nhờ phương thức sắp xếp hợp
lý ở giao diện sử dụng và kiểu hiển thị kết quả theo thời gian thực trong X Code Runtime Tức trong lúc viết mã, kết quả sẽ ngay lập tức hiện ra để tiện việc chỉnh sửa và hình ảnh cũng có thể xem ngay từ bên trong IDE Ngoài ra, X Code cũng sẽ dựng các kịch bản thực hiện trong các ứng dụng, tính năng này giúp lập trình viên
có thể quản lý ứng dụng khỏi bị sự cố tràn bộ nhớ
Các lập trình viên có thể tham khảo và làm quen với ngôn ngữ Swift tại trang The Swift Programming Language, tải về sách hướng dẫn sử dụng từ kho Apple iBooks Store và tham khảo cách sử dụng Swift với Cocoa và Objective-C từ trang hướng dẫn dành cho lập trình viên
Cơ bản về Swift
Swift là một ngôn ngữ lập trình mới cho phát triển ứng dụng iOS, OS X, Watch OS, Swift có khá nhiều điểm giống với Objective C Swift cung cấp các kiểu cơ bản như Int cho các số nguyên, Double và Float cho dồ thực , Bool cho giá trị True hoặc False và String cho chuỗi kí tự Swift cũng cung cấp 3 kiểu Collection như Array, Set và Dictionary để quản lý dạng danh sách mảng Swift sử dụng các biến để lưu trữ và tham chiếu giá trị bởi một tên xác định Swift sử dụng nhiều những giá trị không thay đổi được gọi là hằng số và mạnh hơn nhiều so với hằng số trong C Hằng số được sử dụng giúp cho code rõ ràng và an toàn hơn trong lúc bạn làm việc với các giá trị mà không cần thay đổi Ngoài các kiểu quen thuộc , Swift còn giới thiệu một kiểu mới hoàn toàn không có trong Objective C,
đó là kiểu Tuple Tuple cho phép bạn tạo và gom nhóm các giá trị không cùng kiểu
dữ liệu Tuple có thể trả ra nhiều giá trị từ một hàm như là một giá trị duy nhất
Hằng số và biến
Hằng là giá trị không được thay đổi sau khi nó được khai báo Biến là giá trị
có thể được thay đổi bằng một giá trị khác khi cần
Hằng và biến phải được khai báo trước khi sử dụng Bạn phải khai báo các hằng với từ khoá là let và biến với từ khoá là var
Trang 29Kiểu Int: Bạn không cần phải chọn một kích thước cụ thể nào bởi Int sẽ
thay thế hết tất cả Trừ khi bạn muốn chọn một kích thước cụ thể của integer Nên
sử dụng Int cho các giá trị sô nguyên để hỗ trợ đoạn mã nhất quán và khả năng tương thích hơn
var max:Int = Int.max
//Kết quả: 9223372036854775807
Kiểu UInt :Bạn không cần phải chọn một kích thước cụ thể nào bởi UInt sẽ
thay thế hết tất cả Trừ khi bạn muốn chọn một kích thước cụ thể của integer Nên
Trang 30sử dụng UInt cho các giá trị số nguyên dương để hỗ trợ đoạn mã nhất quán và khả năng tương thích
hơn
var max2:UInt = UInt.max
//Kết quả: 18446744073709551615
Trang 31 Kiểu Float và kiểu Double
Là một dạng phân số Có thể lưu trữ những số thập phân mà kiểu integer không lưu trữ được.Swift cung cấp 2 kiểu là:
- Float(32-bit)
- Double(64-bit)
Kiểu Safety và Kiểu Inference
Swift là một ngôn ngữ lập trình an toàn Vì thế Swift muốn bạn phải khai báo
rõ ràng về các kiểu giá trị Nếu có bạn khai báo biến kiểu String thì bạn không thể truyền giá trị kiểu Int hoặc ngược lại Bởi vì Swift thực hiện kiểm tra kiểu (type check) khi biên dịch và báo hiệu những kiểu không phù hợp là lỗi Điều này cho phép bạn nắm bắt và sửa lỗi càng sớm càng tốt Type check giúp bạn tránh được lỗi khi bạn đang làm việc với các kiểu giá trị khác nhau Tuy nhiên, không có nghĩa là bạn phải xác định kiểu của mỗi hằng và biến mà bạn khai báo Nếu bạn không chỉ định các kiểu giá trị, Swift sẽ sử dụng kiểu Inference để tìm ra kiểu thích hợp dựa trên giá trị mà bạn đã cung cấp Kiểu Inference đặt biệt hữu ích khi bạn khai báo một hằng hoặc một biến có giá trị ban đầu
Chuyển đổi kiểu số
Chuyển các kiểu Integer về một kiểu đồng nhất để phù hợp các tình huống
sử dụng Tránh tính trạng tràn dữ liệu, tối ưu hoá bộ nhớ
Chuyển kiểu số nguyên :Ở ví dụ dưới hằng so1 và hằng so2 có 2 kiểu số
nguyên khác nhau, vì thế ta phải ép kiểu của hằng so1 sang cùng kiểu với hằng so2
là kiểu Int16
Chuyển kiểu Int với Float/Double: Ở ví dụ dưới hằng so3 có kiểu Int và
hằng so4 có kiểu Double, vì thế ta phải ưu tiên ép kiểu Int sang Double
Kiểu Aliases
Thay thế một kiểu hiện có Được khai báo với từ khoá typealias
Ta có thể thấy kiểu Aliases có tên alias được nhận kiểu UInt32 và biến so5 có
Trang 32kiểu alias Thực chất là biến so5 nhận kiểu UInt32 thông qua alias Từ ví dụ trên ta
thấy kiểu aliases hữu ích khi muốn để cập đến một kiểu đã tồn tại với tên khác
Trang 33 Kiểu Boolean
Đây là kiểu trả về hai giá trị True và False
Thường được sử dụng nhiều trong trường hợp so sánh, câu lệnh if
bỏ các lỗi mã hóa phổ biến Toán tử gán (=) không trả về một giá trị, để ngăn chặn
nó được sử dụng lẫn lộn với toán tử so sánh (==) Toán tử số học (+, -, *, /,% và vv) phát hiện và không cho phép tràn giá trị, để tránh những kết quả bất ngờ khi làm việc với các con số lớn hơn hay nhỏ hơn so với phạm vi cho phép giá trị của các kiểu lưu trphẩyữ chúng Bạn có thể quyết định tham gia vào hành vi tràn giá trị bằng cách sử dụng các toán tràn Swift, như được mô tả trong Overflow Operators Không giống như C, Swift cho phép bạn thực hiện tìm số dư (%) tính trên số phẩy động Swift cũng cung cấp hai toán tử phạm vi (a <b và a …b) không tìm thấy trong C, như một lệnh tắt để thể hiện một loạt các giá trị Phần này mô tả các toán
tử phổ biến trong Swift Advanced Operators bao gồm các toán tử nâng cao của Swift, và mô tả làm thế nào để xác định các tuỳ chỉnh toán tử của riêng bạn và thực hiện các tiêu chuẩn vận hành với nhiều tùy chỉnh của riêng bạn
Trang 34Toán tử số dư (a% b) tính toán ra bao nhiêu bội số của b s trả về giá trị
được để lại (gọi là phần còn lại)
Toán tử số dư thập phân
Không giống như toán tử số dư trong C và Objective-C, toán tử số dư của Swift cũng có thể hoạt động trên các số dấu chấm động:
Toán tử tăng và giảm dần
Toán tử tăng dần (++) có nghĩa là i = i + 1
Toán tử giảm dần( ) có nghĩa là i = i -1
Trang 35- Nhỏ hơn hoặc bằng (a <= b)
Mỗi toán tử so sánh trả về một giá trị Bool để cho biết hay không câu lệnh
là true:
Trang 36 Toán tử phạm vi
Swift gồm 2 loạt toán tử là: Closed Range Operator và Half-Open Range Operator
Closed Range Operator: Phạm vi toán tử kép kín (a … b) định nghĩa một
phạm vi đó chạy từ a đến b, và bao gồm các giá trị a và b Giá trị của a không lớn hơn b
Toán tử phạm vi khép kín hữu ích khi lặp qua một dãy mà bạn muốn tất cả các giá trị được sử dụng, chẳng hạn như với một vòng lặp for-in:
Half-Open Range Operator: Toán tử bán phạm vi (a <b) định nghĩa một
phạm vi chạy từ a đến b, nhưng không bao gồm b Nó được cho là mở một nửa
(half-open) bởi vì nó có chứa các giá trị đầu tiên, nhưng không có giá trị cuối cùng của nó Giống như với toán tử phạm vi khép kín, giá trị của a không được lớn hơn
b Toán tử bán phạm vi đặc biệt hữu ích khi bạn làm việc với danh sách dạng
zerobased như mảng, nơi mà nó hữu ích để đếm (nhưng không bao gồm) độ dài của danh sách:
Toán từ logic
Toán tử logic -Logical operators – chỉnh sửa hoặc kết hợp các giá trị logic
Boolean true và false Swift hỗ trợ ba chuẩn toán tử logic được tìm thấy dựa trên
ngôn ngữ C:
- Logical NOT (!a)
- Logical AND (a && b)
- Logical OR (a || b)
Logical NOT Operator(Toán tử Logic NOT) Toán tử logic NOT – logical NOT operator – (! a) đảo ngược một giá trị Boolean để true trở thành false, và false trở thành true Toán tử logic NOT là một toán tử tiền tố, và sẽ xuất hiện ngay trước khi giá trị nó hoạt động, mà không cần bất kỳ khoảng trắng nào Nó có thể được đọc là “not a”, như đã thấy trong các ví dụ sau đây:
Trang 37 Toán tử Logic AND
Toán tử logic AND (a && b) tạo ra các biểu thức logic mà cả hai giá trị phải true cho kết quả cộng chung cũng là true
Nếu một trong hai giá trị là false, kết quả cộng chung cũng sẽ là false Trong
thực tế, nếu giá trị đầu tiên là false, giá trị thứ hai thậm chí sẽ không được đánh giá,
bởi vì nó không thể làm thay đổi sự kết quả cộng chung tương đương với true Điều
này được gọi là đánh giá ngắn mạch – short-circuit evaluation
Ví dụ này xem xét hai giá trị Bool và chỉ cho phép truy cập nếu cả hai giá trị là true:
Toán tử Logic OR
Toán tử logic OR (a || b) là một toán tử được viết bởi hai dấu gạch liền kề Bạn sử dụng nó để tạo ra các biểu thức logic trong đó chỉ có một trong hai giá trị là true thì những kết quả cộng chung là true Giống như toán tử logic AND, toán tử logic OR sử dụng đánh giá ngắn mạch để xem xét biểu thức của nó Nếu phía bên
trái của một biểu thức logic OR là true, bên phải không được đánh giá, bởi vì nó
không thể thay đổi kết quả của biểu thức tổng thể
Kiểu String and Kiểu Character
Một chuỗi là một tập hợp có sắp xếp của những kí tự, như là “hello world”
hay “albatross”.Chuỗi trong Swift biểu diễn bằng kiểu String, chúng lần lượt biểu diễn một tập hợp các giá trị của kiểu ký tự (Character) Kiểu String và Character
của Swift cung cấp nhanh, cách phù hợp với mã thống nhất (Unicode) để làm việc với văn bản trong mã code của bạn.Cú pháp để tạo ra các chuỗi và thao tác đỡ nặng nề hơn và dễ đọc hơn, với cú pháp chuỗi ký tự cũng tương tự như C.Nối chuỗi cũng đơn giản như cách cộng hai chuỗi với nhau với toán tử + và tính biến đổi chuỗi được quản lý bằng cách chọn giữa một hằng hoặc một biến, giống như bất kỳ giá trị nào khác trong Swift
Với cú pháp đơn giản, kiểu String của Swift rất nhanh trong việc thực hiện các thao tác với chuỗi.Mỗi chuỗi bao gồm các ký tự Unicode mã hóa độc lập, và cung cấp hỗ trợ cho việc truy cập các ký tự đại diện trong mã Unicode khác nhau
Trang 38Bạn cũng có thể sử dụng chuỗi để chèn hằng, biến, chữ, và các biểu thức thành chuỗi dài, trong một quá trình được gọi là suy chuỗi Điều này làm cho nó dễ dàng
để tạo ra các giá trị chuỗi tùy chỉnh để hiển thị, lưu trữ và in ấn
Chuỗi kí tự là một chuỗi cố định của văn bản bao quanh bởi một cặp dấu ngoặc kép(“”)
Bạn có thể thay đổi chuỗi cho một biến có kiểu String bằng cách gán vào cho biến đó một giá trị kiểu String
Character: Là một kí tự trong một chuỗi
Collection Type
Mảng(Array): Lưu trữ các giá trị cùng kiểu theo một danh sách có thứ tự
Các giá trị có thể truy xuất theo vị trí trong Array
Dictionary:Lưu trữ nhiều giá trị cùng kiểu, giá trị của các kiểu giống như
Array nhưng không có thứ tự nhất định Mỗi giá trị được liên kết thông qua một key duy nhất Bạn sử dụng một từ điển khi bạn cần tìm ra giá trị dựa trên nhận dạng của chúng, theo cácgiống như một từ điển thực tế được sử dụng để tìm định nghĩa cho một từ cụ thể Những thao tác cơ bản trong Dictionary:
Control Flow
For-In :Bạn có thể sử dụng vòng lặp để duyệt qua các phần tử, các phần tử
trong mảng, các kí tự trong chuỗi Vòng lặp duyệt từ 0 đến 3:
Vòng lặp duyệt qua các phần tử trong mảng:
Vòng lặp duyệt qua các ký tự trong chuỗi:
If: Câu lệnh điều kiện đơn giản Khi điều kiện đúng nó sẽ thực hiện một tập
lệnh này, khi điều kiện sai sẽ thực hiện một tập lệnh khác
Swich:Một lệnh switch xem xét một giá trị và so sánh nó với một số mô hình
phù hợp có thể Sau đó nó thực hiện một khối mã code thích hợp, dựa trên mô hình đầu tiên mà sự phù hợp thành công Một lệnh switch cung cấp một thay thế cho lệnh
if để hồi đáp cho nhiều trạng thái tiềm năng Mỗi Swich gồm nhiều Case
Một switch case có thể sử dụng where để kiểm tra điều kiện bổ sung
Trang 39Continue: Câu lệnh continue nói với một vòng lặp dừng hành động nó đang
thực hiện và bắtđầu lại tại điểm bắt đầu của việc duyệt qua vòng lặp tiếp theo
Break:Lệnh break kết thúc việc thực hiện của toàn bộ lệnh chuyển điều
khiển ngay lập tức.Lệnh break có thể được sử dụng bên trong lệnh switch, hoặc lệnh lặp khi bạn muốn chấm dứt việc thực hiện của lệnh switch hoặc lệnh lặp sớm hơn nếu không phải là trường hợp
Trang 40 Function
Hàm(function) là khối mã khép kín dùng để thực hiện một tác vụ cụ thể Bạn cho một tên hàm để xác định những gì nó làm, và tên này được sử dụng để
“gọi” hàm để thực hiện tác vụ khi cần thiết Cú pháp hàm thống nhất của Swift là
đủ linh hoạt để thể hiện bất cứ điều gì từ một hàm C-style đơn giản không có tên tham số đến một phương thức Objective-C-style phức tạp với các tên tham số hàm địa phương và bên ngoài cho mỗi tham số Các thông số có thể cung cấp các giá trị
để mặc định để đơn giản hóa các cuộc gọi chức năng và có thể được thông qua như tham số in-out, mà sửa đổi một biến được khi hàm đã hoàn tất việc thực hiện Mỗi hàm trong Swift đều có một kiểu, bao gồm các kiểu tham số và kiểu trả về của hàm Bạn có thể sử dụng kiểu này giống như bất kỳ kiểu nào khác trong Swift, việc này dễ dàng để truyền vào hàm cũng như tham số cho các hàm khác, và để trả
về hàm này từ hàm khác Hàm này cũng có thể được viết trong các hàm khác để đóng gói các hàm hữu ích trong phạm vi hàm lồ
Method
Method là những function liên quan tới đối tượng đó
Subclass(lớp con) : là hành động của một lớp mới dựa trên một lớp hiện có
Các lớp con thừa hưởng những đặc tính từ lớp hiện có, sau đó bạn có thể tinh chỉnh Bạn cũng có thể thêm các đặc tính mới cho các lớp con
Để chỉ ra rằng một lớp con có một lớp cha, viết tên lớp con trước tên lớp cha, cách nhau bằng dấu hai chấm:
Overriding(ghi đè):Bạn có thể ghi đè lên một thể hiện hay thuộc tính lớp
thừa kế để cung cấp getter và setter tùy chỉnh của riêng bạn cho thuộc tính đó, hoặc để thêm quan sát thuộc tính để cho phép thuộc tính ghi đè để quan sát khi giá trị thuộc tính ngầm thay đổi