Mình đã nhiều lần đi phỏng vấn iOS tại các công ty, và đây là những câu hỏi mà nhà tuyển dụng hay hỏi mình.
Ngoài những câu hỏi phổ biến về tuyển dụng như: Giới thiệu bản thân bạn, tại sao bạn lại nghỉ việc ở công ty hiện tại, lương bạn mong muốn là bao nhiêu… thì với iOS nhà tuyển dụng thường đưa ra những câu hỏi về lý thuyết như sau:
1. ARC là gì?
Trả lời :
ARC là viết tắt của Automatic Reference Counting, là một phương pháp quản lý bộ nhớ trước lúc thực thi chương trình (compile time). ARC không hoạt động như các Garbage Collection khác mà thực ra chỉ là phần front-end của compiler nhằm mục đich tự động chèn thêm các đoạn code như retain hay release vào trong đối tượng của bạn và quyết định khi nào đối tượng đó không còn được sử dụng nữa. Từ đấy lập trình viên không phải viết các đoạn code như retain hay release này nữa mà bộ nhớ vẫn được quản lý tốt.
2. Khi nào thì dùng ARC, khi nào không dùng ARC?
Trả lời :
ARC chỉ được hỗ trợ sử dụng từ iOS 5 trở lên. Các app sử dụng iOS 4 trở xuống thì lập trình viên phải tự viết code quản lý bộ nhớ. Đối với các dự án mà có dùng ARC nhưng vẫn có các đoạn code sử dụng manual memory management như retain hay release, autorelease… thì vẫn có thể sử dụng file code đó với cơ chế non-arc bằng cách config trong Build Phases.

cau-hoi-phong-van-ios
3. Biến strong, weak khác nhau thế nào?
Trả lời :
Strong pointer trỏ đến một đối tượng và sở hữu đối tượng đó (quyết định đến sự tồn tại của đối tượng), còn weak pointer trỏ đến một đối tượng nhưng chỉ tham chiếu giá trị của đối tượng đó (không quyết định đến sự tồn tại của đối tượng). Với mỗi biến strong trỏ đến 1 đối tượng thì retainCount của đối tượng sẽ tăng thêm 1, còn biến weak thì không tăng retainCount. Khi retainCount của đối tượng về 0 thì đối tượng đó sẽ bị hủy, và con trỏ weak lập tức được set bằng giá trị null.
4. Khi nào nên dùng thuộc tính weak?
Trả lời :
Thuộc tính weak nên dùng trong trường hợp 2 class có biến đối tượng reference đến nhau, hoặc trường hợp 2 class có quan hệ cha con, khi ấy trong 1 class ta sẽ dùng biến dạng weak để không bị leak memory.
5. Có khai báo được public static trong objective-c hay không?
Trả lời :
Có. Để khai báo static thì có từ khóa static để khai báo các đối tượng, còn public thì sử dụng dấu + khi khai báo các funtion (thay cho dấu -). Kết hợp 2 cái này lại ta có đối tượng là public static.
6. Phân biệt các hàm sau: viewDidLoad, viewDidUnload, viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear ?
Trả lời :
– 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.
7. 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.
Trả lời :
– Chuyển sang background: applicationDidEnterBackground (Trong AppDelegate class)
– Chuyển lên foreground: applicationWillEnterForeground (Trong AppDelegate class)
8. App Bundle là gì ?
Trả lời :
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.
9. Từ khóa @synthesize có ý nghĩa gì ?
Trả lời :
Dùng synthesize cho 1 biến để trình biên dịch tự động tạo hai hàm getter và setter cho biến đó (trong điều kiện là ta chưa viết 2 hàm này), nếu ta đã tự viết các hàm setter và getter sẵn rồi thì trình biên dịch sẽ không tạo thêm getter và setter nữa.
10. Các trạng thái có thể có của một ứng dụng iOS ?
Trả lời :
– 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.
Xem thêm: Câu hỏi phỏng vấn java, tổng hợp câu hỏi phỏng vấn
CuongNT – iOS developer tại SmartJob
arc,
câu hỏi phỏng vấn,
ios,
Phỏng vấn,