Tôi hy vọng bạn sẽ thích thú với bài hướng dẫn đầu tiên và hoàn thành ứng dụng đầu tay của bạn. Trước khi chúng ta thảo luận về bài hướng dẫn tiếp theo và xây dựng một ứng dụng phức tạp hơn, hãy cùng nhau nhìn lại một cách kỹ càng hơn về ứng dụng Hello World. Điều đó sẽ giúp bạn hiểu hơn về cú pháp của ngôn ngữ Objective-C và cách thức hoạt động của ứng dụng.
Simon Sg - Appcoda.com

Ở bài trước chúng ta đã từng bước xây dựng nên ứng dụng Hello World. Tuy nhiên xuyên suốt bài hướng dẫn đó, chắc hẳn bạn sẽ thắc mắc một vài câu hỏi như:

  • Các file .xib, .h và .m là gì?
  • Một đoạn code nằm trong "showMessage" có ý nghĩa gì?
  • Chuyện gì sẽ xảy ra sau khi bạn tap vào button Hello World? Làm sao để button này có thể bắt được hành động (action) showMessage ?
  • Nút "Run" trong Xcode hoạt động như thế nào?

Mình muốn bạn tập trung vào việc khám phá môi trường làm việc của Xcode, vì vậy mình đã không giải thích bất kỳ điều gì về Xcode ở bài trước. Tuy nhiên, điều đó là hết sức cơ bản đối với mọi developer để hiểu được chi tiết, cụ thể đẳng sau những dòng code, và nắm bắt được các khái niệm cơ bản của lập trình iOS. Đối với một số khái niệm kỹ thuật, có thể sẽ khó hiểu hơn một chút nếu bạn không có kiến thức cơ bản về lập trình. Tuy nhiên đừng lo lắng quá, đây mới là ởi đầu. Ở các bài viết tiếp theo bạn sẽ viết nhiều code hơn, và bạn sẽ hiểu hơn về lập trình iOS. Đơn giản là cố gắng hết mình :D

1. Các file Interface Builder, Header và Implementation (thực thi):

Câu hỏi đầu tiên là: Các file .xib, .h và .m là gì? Đây là một câu hỏi khá hay. Dưới phần Project Navigator (Điều hướng project). bạn có thể nhận ra 3 loại file - .xib, .h, .m. (Nếu bạn mở rộng thư mục Supporting Files, bạn sẽ nhận ra các loại file khác nữa như là plist hay framework. Tuy nhiên hãy tạm quên mấy file này đi. Chúng ta sẽ thảo luận về chúng sau.

.xib - Đối với các file có đuôi mở rộng là .xib, chúng là các file về giao diện (hay còn gọi là Interface Builder), các file này chứa giao diện người dùng (UI - User Interface) Nếu bạn mở file .xib, Xcode sẽ tự động chuyển sang chế độ giao diện - Interface Builder để bạn có thể sửa đổi giao diện người dùng cho ứng dụng của bạn bằng cách kéo và thả (drag-and-drop).

Interface Builder trong Xcode.

.h và .m - Các file có đuôi mở rộng .h, chúng là các file header, trong khi các file có đuôi mở rộng là .m, chúng là các file thực thi - implementation. Giống như các ngôn ngữ lập trình khác, source code của Objective-C được chia thành 2 phần: Interface và Implementation.

Để giúp bạn hiểu rõ, chúng ta hãy đưa ra 1 ví dụ tương đồng, ví dụ là cái điều khiển TV. Thật thuận tiện để tăng giảm âm lượng của TV với một điều khiển từ xa không dây. Để tăng âm lượng, bạn nhấn nút "Volume +". Để chuyển kênh, bạn đơn giản chỉ cần nhấn và số kênh trên điều khiển. Cho phép mình hỏi bạn 1 câu: Bạn có biết chuyện gì xảy ra khi bạn nhấn vào nút "Volume - Âm lượng" không? Thực ra là không, mình tin rằng phần lớn mọi người không hề biết cách thức điều khiển TV giao tiếp với TV và điều khiển âm lượng của chiếc TV đó. Đó là điều mà chúng ta biết, cái nút âm lượng mà chúng ta sử dụng để thay đổi âm lượng. Trong ví dụ này, cái nút mà bạn tương tác thì gọi là "Interface" và những việc được thực hiện đằng sau hành động nhấn vào nút đó thì gọi là "Implementation - thực thi".

Chắc hẳn bây giờ bạn đã hình dung được Interface và Implementation rồi. Hãy quay lại với code. Trong Objective-C, các Interface của 1 class (lớp) được tổ chức trong file .h. Chúng ta thường sử dụng cú pháp "@interface" để khởi tạo interface cho 1 class. Hãy xem trong file HelloWorldViewController.h, hay còn gọi là file header:

[code language="objc"]@interface HelloWorldViewController : UIViewController
-(IBAction)showMessage;
@end[/code]

Nó bắt đầu với @interface và theo sau là tên class HelloWorldViewController. Bên trong, ta khởi tạo một action "showMessage", hay còn được biết đến với một phương thức gọi.

Giống như nút "Volume", rõ ràng rằng chúng ta không hề biết hành động (action) showMessage làm gì. Chúng ta chỉ hiểu rằng nó dùng để hiển thị 1 thông báo lên màn hình. Còn việc thực thi thì được đặt trong file thực thi HelloWorldViewController.m:

[code language="objc"]@implementation HelloWorldViewController
// I've removed other methods for better reading. Focus on the showMessage method first.
- (IBAction)showMessage
{
UIAlertView *helloWorldAlert = [[UIAlertView alloc]
initWithTitle:@"My First App" message:@"Hello, World!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
// Display the Hello World Message
[helloWorldAlert show];
}
@end[/code]

Như bạn thấy ở trên, bạn sử dụng việc khai báo "@implementation" để khai báo 1 sự thực thi. Bên trong phương thức "showMessage", có dòng code để định nghĩa việc hiển thị thông báo tin nhắn trên màn hình. Bạn có thể không hiểu bất kỳ dòng code nào trong phương thức showMessage. Nói ngắn gọn, các dòng code đó tạo 1 UIAlertView với tiêu đề là "My First App", và dòng thông báo với nội dung "Hello, World". Sau đó nó sẽ được gọi với phương thức "show" và yêu cầu iOS hiển thị một pop-up (cửa số bật lên) để hiển thị thông báo Hello World trên màn hình.

2. Đằng sau việc nhấn(tap) và chạm (touch):

Việc gì đã xảy ra sau hành động nhấn vào nút Hello World? Làm thế nào mà nút Hello World có thể gọi (invoke) phương thức (method) showMessage để hiển thị thông báo "Hello, World"?

Hãy nhớ lại rằng bạn đã thiết lập 1 kết nối giữa button Hello World và hành động showMessage trong Interface Builder. Hãy mở lại file HelloWorldViewController.xib và chọn vào nút Hello World. Click vào button "Sent Events" ở trong phần tiện ích Utillity Area để mở Sent Events.

Khu vực Sent Events chỉ ra cho bạn tất cả kết nối (connection) giữa các sự kiện (event) và các hành động (action). Như bạn thấy ở hình trên thì sự kiện "Touch Up Inside" đã được kết nối tới hành động showMessage. Trong iOS. các ứng dụng đều là theo hướng sự kiện (event-driven). Các đối tượng (object) như UIButton thường lắng nghe các sự kiện (như chạm, nhấn). Khi bắt được 1 sự kiện, đối tượng sẽ gọi (call) đến hành động đã được cài đặt trước đó để kết nối với sự kiện này (event).

Trong ứng dụng Hello World của chúng ta, khi người dùng nhấn ngón tay vào button, thì sự kiện Touch Up Inside sẽ được bắt. Do đó, nó sẽ gọi đến hành động showMessage để hiện thị thông báo Hello World.

Hình minh họa dưới đấy sẽ khái quát lại những luồng sự kiện và những gì mình vừa mô tả.

3. Đằng sau việc nhấn nút "Run":

Khi bạn click vào nút Run, Xcode sẽ tự động chạy Simulator và chạy ứng dụng của bạn. Tuy nhiên chuyện gì xảy ra đằng sau việc nhấn nút Run? Là một lập trình viên, bạn cần phải nhìn khái quát toàn bộ quá trình đó.

Toàn bộ quá trình có thể chia ra làm 3 giai đoạn: Biên dịch (compile), đóng gói (package) và chạy (run).

Biên dịch (Compile): Bạn có thể nghĩ rằng iOS có thể hiểu được code Objective-c. Trong thực tế, iOS chỉ đọc được ngôn ngữ máy (machine code). Code Objective-C là chỉ dành riêng cho bạn, cho người lập trình viên viết và đọc. Để khiến iOS hiểu được mã nguồn code (source code) ứng dụng của bạn, chung ta cần phải đi qua một quá trình dịch ngôn ngữ Objective-C sang ngôn ngữ máy. Quá trình này thường được xem là "biên dịch - compile". Xcode đã được kèm theo 1 trình biên dịch được xây dựng sẵn để biên dịch mã nguồn code.

Đóng gói (Package): Khác với mã nguồn, một ứng dụng thường chứa đựng các file tài nguyên như ảnh (image), văn bản, file xib...Tất cả tài nguyên này được đóng gói lại để tạo nên ứng dụng cuối cùng.

Chúng ta gọi 2 tiến trình trên là tiến trình "xây dựng - build".

Chạy (Run): Việc này sẽ khởi chạy Simulator và nạp ứng dụng của bạn vào.

Note: Bản gốc được viết từ website appcoda.com và được dịch bởi VietDevelopers. Mọi trích dẫn, hay copy vui lòng ghi rõ nguồn và được sự đồng ý của tác giả. Xin cảm ơn và chúc các bạn học tốt!

Lập trình iOS - Lập trình iOS cơ bản - Lập trình Swift - Lập trình Swift 3 - Học lập trình iOS - Lập trình di động - Học lập trình - Vietdevelopers - Vietdevelopers.com