Thứ Sáu, 18 tháng 5, 2018

Cấu trúc ứng dụng iOS

 

1.1 Hàm Main.
 
Tương tự như trong ngôn ngữ lập trình C, ứng dụng iOS sử dụng một hàm Main như là điểm bắt đầu của ứng dụng. Tuy nhiên bạn không cần phải lo lắng vì hàm này đã được Xcode tự động tạo ra khi bạn tạo một ứng dụng iOS. Hàm main có dạng như sau:
#import <UIKit/UIKit.h>
int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
Nhiệm vụ của hàm Main là trao quyền điều khiển cho UIKit framework. Hàm UIApplicationMain điều khiển quá trình này bằng cách tạo ra những đối tượng quan trọng nhất của ứng dụng, tải giao diện người dùng từ các file storyboard hoặc file  .xib, gọi code khởi tạo.
1.2 Cấu trúc ứng dụng.
Như đã nói trong phần 1, ứng dụng iOS sử dụng pattern M-V-C. Điều đó có nghĩa là dữ liệu và business logic được tách ra khỏi việc trình diễn dữ liệu.
Khi bắt đầu khởi động, hàm UIApplicationMain tạo ra các đối tượng cơ bản quan trọng, và quan trọng nhất là đối tượng UIApplication. Nhiệm vụ của đối tượng này là làm đơn giản hoá sự tương tác giữa hệ thống và các đối tượng khác trong ứng dụng.
Hình dưới đây thể hiện các đối tượng này:
Các đối tượng cơ bản bao gồm:
- UIApplication: Quản lý vòng lặp sự kiện và các hành vi mức cao khác. Thực tế ít sử dụng đối tượng này, và thường chỉ sử dụng khi muốn truy cập đối tượng app delegate.
- App delegate: Là đối tượng có mặt trong mọi ứng dụng iOS và là duy nhất (shared instance). Bạn có thể dễ dàng truy cập đối tượng này bằng cách gọi:
AppDelegate *delegate=[[UIApplication sharedApplication] delegate];
Đối tượng này chứa các method về trạng thái của ứng dụng. Nó thường được sử dụng để thiết lập khởi tạo cho ứng dụng (các biến, key, cấu trúc dữ liệu, etc).
- Documents và Data model: Đây là các custom objects, bạn có thể tạo ra khi khởi tạo ứng dụng hoặc tạo ra khi cần thiết.
- Các đối tượng ViewControllers: Quản lý việc trình diễn nội dung ứng dụng trên màn hình. Đây là các đối tượng rất quan trọng vì những màn hình của ứng dụng iOS hầu hết là các ViewController. Một ViewController quản lý một đối tượng UIView và tất cả các subviews của nó. Khi được trình diễn, UIViewController hiển thị các views của nó bằng cách thêm chúng vào cửa sổ của ứng dụng (window).
- Đối tựng UIWindow: Hầu hết các ứng dụng chỉ có một Window. Tuy nhiên cũng có những ứng dụng có nhiều Window (để tạo một số hiệu ứng).
2. Vòng lặp chính
Vòng lặp chính xử lý tất cả những event mà user tạo ra. Đối tượng UIApplication cài đặt vòng lặp chính tại thời gian khởi động ứng dụng và sử dụng nó để xử lý các sự kiện và cập nhật giao diện người dùng. Mặc dù một chương trình có thể sử dụng nhiều thread nhưng vòng lặp chính luôn được chạy trên main thread. Điều này đảm bảo việc sự kiện nào đến trước sẽ được xử lý trước đúng theo thứ tự.
Vòng lặp chính chấp nhận một số kiểu sự kiện và forward chúng tới đối tượng tiếp nhận (được gọi là responder). Chi tiết về vòng lặp chính sẽ không được nói chi tiết ở đây vì nó nằm ngoài phạm vi của bài viết. Bạn có thể tham khảo ở đây
3. Các trạng thái của ứng dụng iOS
Trạng tháiDiễn tả
Not runningỨng dụng chưa được khởi động hoặc bị hệ thống đóng.
InactiveỨng dụng đang chạy ở foreground nhưng hiện tại không nhận sự kiện (có thể đang thực hiện code). Đây là trạng thái quá độ, trước khi chuyển sang một trạng thái khác.
ActiveỨng dụng đang chạy ở foreground (ứng dụng hiện tại đang hiển thị) và sẽ nhận các event. Đây là trạng thái bình thường khi bạn đang mở và sử dụng ứng dụng
BackgroundỨng dụng ở trong background và đang thực thi mã nguồn. Hầu hết các ứng dụng đi vào trạng thái này trong thời gian ngắn trước khi bị kết thúc. Tuy nhiên, một ứng dụng đòi hỏi thêm thời gian thực thi có thể ở lâu hơn trong trạng thái này so với các ứng dụng khác (download, play music, etc). Một ứng dụng cũng có thể khởi động trực tiếp để đi vào trạng thái này.
SuspendedLà trạng thái khi ứng dụng ở background nhưng không thực thi code, chẳng hạn khi bạn bấm vào nút Home để trở về màn hình chính của iPhone. Khi ở trong trạng thái này, ứng dụng được duy trì trong bộ nhớ nhưng không thực thi mã nguồn. Khi bộ nhớ sắp hết, một số ứng dụng trong trạng thái Suspended có thể bị đóng để nhường chỗ cho ứng dụng ở Foreground.
Dưới đây là minh hoạ cho iOS life cycle:
Mỗi khi chuyển đổi trạng thái sẽ đi kèm với một lời gọi hàm trong đối tượng App delegate. Cụ thể như sau:
*application:willFinishLaunchingWithOptions: Method đầu tiên được gọi khi khởi động ứng dụng.
* application:didFinishLaunchingWithOptions: Cho phép bạn thực hiện bất cứ khởi tạo nào trước khi ứng dụng hiển thị trên màn hình.
*applicationDidBecomeActive: Được gọi trước khi ứng dụng chuẩn bị trở thành ứng dụng foreground.
* applicationWillResignActive: Ứng dụng sẽ ra khỏi foreground.
*applicationDidEnterBackground: Ứng dụng đã ra khỏi foreground và có thể kết thúc bất cứ lúc nào.
*applicationWillEnterForeground: Ứng dụng sẽ ra khỏi background và trở lại foreground nhưng vẫn chưa vào trạng thái active.
* applicationWillTerminate: Được gọi khi ứng dụng bị đóng. Method này sẽ không được gọi khi ứng dụng vào trạng thái suspended.
4. Vòng đời của UIViewController
Thường thì mỗi màn hình trong ứng dụng iOS là một UIViewController. Đây là đối tượng cơ bản, và các ViewController khác đều phải kế thừa nó. Mỗi UIViewController quản lý một View và các subviews của nó. Vòng đời của UIViewController như sau:
Có thể xem điểm bắt đầu là “Does the view exist”. Từ đây một loạt các method được gọi:
– loadView: Thường được sử dụng trong các ứng dụng trước iOS5. Từ iOS 5 trở đi, method này thường không được sử dụng nữa.
– viewDidLoad: Được gọi một lần khi lần đầu tiên đối tượng view của đối tượng UIViewController hiển thị.
– viewWillAppear: Có thể được gọi nhiều lần tuỳ theo view đó đã tồn tại hay chưa. Method này được gọi trước khi view hiển thị trên màn hình.
– viewDidAppear: Tương tự viewWillAppear, có thể được gọi nhiều lần. Method này được gọi sau khi view đã hiển thị.
– didReceivingMemoryWarning: Khi view đã hiển thị và bộ nhớ bị sử dụng quá nhiều, nó sẽ gọi hàm này để cảnh báo. Bạn có thể dùng hàm này để xoá dữ liệu dư thừa.
– viewWillDisappear/viewDidDisappear: Được gọi trước và sau khi view bị remove khỏi màn hình.
– viewDidUnload: Là method cuối cùng được gọi sau khi view đã biến mất khỏi màn hình.
Trong phần tiếp theo sẽ hướng dẫn các bạn tiếp cận và sử dụng một trong những component thông dụng nhất của iOS – UITableView. Phần kế tiếp của loạt bài về Objective C cũng sẽ được post sau đó vì Objective C là ngôn ngữ chung, dùng được cả cho iOS và Mac OS nên việc soạn thảo đòi hỏi khá nhiều thời gian.
Bạn muốn học lập trình hãy liên hệ ngay với Mỹ Vân để được nhận ưu đãi từ học viện nhé
Học lập trình tại Đà Nẵng
Học lập trình tại Đà Nẵng 0935029202
Số tài khoản : 56110000942174 BIDV Chi nhánh Đà Nẵng
HUYNH THI MY VAN

Không có nhận xét nào:

Đăng nhận xét