Một NSAssert sẽ ném một ngoại lệ khi nó không thành công. Vì vậy, NSAssert có cách viết ngắn gọn và dễ dàng và kiểm tra bất kỳ giả định nào bạn đã đặt ra trong mã của mình. Nó không phải là (theo ý kiến của tôi) một sự thay thế cho các trường hợp ngoại lệ, chỉ là một lối tắt. Nếu một xác nhận không thành công thì mã của bạn đã xảy ra lỗi nghiêm trọng và chương trình không nên tiếp tục.
Một điều cần lưu ý là NSAssert sẽ không được biên dịch thành mã của bạn trong bản dựng phát hành, vì vậy điều này thường được sử dụng để kiểm tra sự tỉnh táo trong quá trình phát triển. Tôi thực sự có xu hướng sử dụng macro xác nhận tùy chỉnh luôn hoạt động.
Những lần bạn muốn NSException@throw
của riêng mình là khi bạn chắc chắn muốn nó trong một bản phát hành và trong những thứ như thư viện / giao diện công cộng khi một số đối số không hợp lệ hoặc bạn bị gọi không chính xác. Lưu ý rằng nó không thực sự là thông lệ tiêu chuẩn đối với một ngoại lệ và tiếp tục chạy ứng dụng của bạn. Nếu bạn thử điều này với một số thư viện tiêu chuẩn của Apple (ví dụ Core Data), điều tồi tệ có thể xảy ra. Tương tự như một xác nhận, nếu một ngoại lệ được ném ra, ứng dụng thường sẽ kết thúc khá nhanh vì điều đó có nghĩa là có lỗi lập trình ở đâu đó.@catch
NSErrors nên được sử dụng trong các thư viện / giao diện của bạn cho các lỗi không phải là lỗi lập trình và có thể được khôi phục từ đó. Bạn có thể cung cấp thông tin / mã lỗi cho người gọi và họ có thể xử lý lỗi sạch sẽ, thông báo cho người dùng nếu thích hợp và tiếp tục thực hiện. Điều này thường xảy ra đối với những thứ như lỗi Không tìm thấy tệp hoặc một số lỗi không nghiêm trọng khác.