Kiến thức iOS cơ bản cần biết

1. Các trạng thái của một ứng dụng iOS

Trạng thái Diễ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.
Suspended Là 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.

2. App delegate khi thay đổi các trạng thái:

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.

 

3. Vòng đời của UIViewController

uiviewcontroller_lifecycle

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.

Nguồn: http://developerviet.com

Câu hỏi phỏng vấn FPT software

1. list ra 1 số framework từng dùng của iOS

2. Quy trình khi nhận 1 bug từ QC thì phải xử lý thế nào ?

3. Tầm quan trọng của Memory Management ?

4. cho 1 đoạn code, out put là gì ? (Trắc nghiệm)?.

5. Cho 1 đoạn code, Crash chỗ nào ? Đề xuất sửa ?

6. Giải thuật cấu trúc dữ liệu cho thao tác Do, Undo của Paint trên iOS (giống MSPaint) ?

Phỏng vấn iOS, những câu hỏi thường gặp

1. Phân biệt các hàm sau:  viewDidLoad, viewDidUnload, viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear ?

– viewDidLoad được gọi đầu tiên khi view được khởi tạo.

– viewWillAppear được gọi khi view bắt đầu được hiển thị.

– viewDidAppear được gọi khi view đã hiển thị xong.

– viewWillDisappear được gọi khi bắt đầu chuyển sang view khác.

– viewDidDisappear được gọi sau khi đã chuyển sang view khác.

2. Hàm nào được gọi khi application chuyển sang chạy background (nhấn nút home), và hàm nào được gọi khi chuyển lên chạy foreground.

– Chuyển sang background: applicationDidEnterBackground (Trong AppDelegate class)

– Chuyển lên foreground: applicationWillEnterForeground (Trong AppDelegate class)

3. App Bundle là gì ?
Khi xây dựng ứng dụng iOS, Xcode sẽ đóng gói ứng dụng vào một thư mục, thư mục này chứa file thực thi và các tài nguyên bao gồm: hình ảnh, video, cơ sở dữ liệu, icon ứng dụng… được sữ dụng bởi ứng dụng.

4. Các thành phần trong kiến trúc iOS ?
– Cocotouch: hổ trợ các thư viện tương tác giao diện, và sự kiện: UIKit, MapKit, GameKit,EventKit,…
– Media: quản lý việc truy xuất đa phương tiện: CoreAudio, QuaztCore, CoreImage,…

– Core Services: gồm các thư viện hổ trợ truy xuất xuống Kernal: CoreLocation, CoreTelephony, AddressBook …
– Core OS: quản lý bộ nhớ, tuyến trình, tập tin hệ thống, truy xuất các thành phần phần cứng

5. Thế nào là Single Inheritance trong Objective C ?
Một định nghĩa lớp trong Objective C chỉ được kế thừa từ một lớp cha duy nhất, không tồn tại khái niệm đa kế thừa.

6. Thế nào là Fast Enumeration ?
Một tính năng hổ trợ duyệt từng phần tử trong một mảng dữ liệu mà không cần biết tổng số phần tử đang có, sữ dụng cấu trúc for…in

7. Sự khác biệt giữa Frame và Bound ?

8. Từ khóa @dynamic có ý nghĩa gì ?
– Hệ thống không tự phát sinh hàm getter/setter cho các biến lớp.
– Hệ thống không cảnh báo chưa khai báo hàm getter/setter cho các biến lớp lúc biên dịch.

9. Điều gì xảy ra khi thực thi đoạn code sau đây ?
Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];

10. Điều gì xảy ra khi gọi autorelease trên một đối tượng ?
– Giá trị retain count sẽ bị giảm đi một đơn vị lúc thíc hợp
– Đối tượng được đưa vào autorelease pool trong tuyến trình hiện tại
– Tuyến trình chính sẽ tạo một autorelease pool lúc bắt đầu gọi hàm, và hủy pool lúc kết thúc việc gọi hàm.

11. Từ khóa @synthesize có ý nghĩa gì ?

12. Kích thước dữ liệu được phép nhận và gửi đến Apple Push Notification Server?
256 Bytes.

13. Sự khác biệt giữa shadow coppy và deep coppy ?

14. Các trạng thái có thể có của một ứng dụng iOS ?
– Not Running
– Inactive: ứng dụng đang chạy nhưng không nhận bất kỳ sự kiện nào, xảy ra khi người dùng lock màn hình, hoặc ứng dụng đang chạy mà có tin nhắn, hoặc cuộc gọi đến.
– Active (Foreground): ứng dụng đang chạy và xử lý các sự kiện từ người dùng và hệ thống.
– Background: ứng dụng chạy ở chế độ nền, và có thể tiếp tục xữ lý một số tác vụ, ví dụ nhận sự kiện khi người dùng thay đổi vị trí.
– Suspended: ứng dụng chạy ở chế độ nền và không xử lý bất kỳ tác vụ nào, xãy ra khi hệ thống không đủ bộ nhớ, được tự động quản lý bởi iOS và không có thông điệp phản hồi khi ứng dụng chuyển sang trạng thái này.

15. Làm thế nào để hủy một đối tượng outlet ?
– Gán giá trị nil cho đối tượng trong hàm ViewDidUnLoad
– Hủy đối tượng trong hàm deadlock

16. KVO, KVC trong objective C là gì ?

KVC : Key Value Coding, là cách truy cập thuộc tính của một đối tượng sữ dụng chuổi định danh

id someValue =[myObject valueForKeyPath:@"foo.bar.baz"];

KVO: Key Value Observing là cách thức lắng nghe sự thay đổi của mội thuộc tính nào đó của đối tượng

[myObject addObserver:self forKeyPath:@"foo.bar.baz" options:0 context:NULL];