2012-06-19 32 views
11

Gần đây tôi đã bắt đầu học Objective-C và tôi đang làm việc trên ứng dụng iOS làm bài tập, dù sao, tôi muốn xử lý tràn bằng cách ném ngoại lệ (tôi đến từ nền Java) tìm kiếm tham chiếu chỉ có NSException, nhưng sau đó tôi đọc trong phần nói chủ đề về xử lý ngoại lệ và họ đã sử dụng NSError, tôi đã đọc tham chiếu nhưng họ có cùng giao thức và phương thức, vậy sự khác biệt giữa chúng là gì? Và cái nào tốt hơn?Ngoại lệ và lỗi tùy chỉnh NSException và NSError

Ngoài ra, tôi muốn tạo ngoại lệ hoặc lớp lỗi của riêng mình, có phương pháp hoặc trường nào mà tôi nên đưa vào không? (Giống như khi triển khai giao diện Exception trong Java). Cảm ơn

Trả lời

21

NSError được thiết kế cho các lỗi không thể khôi phục, có thể khôi phục. Các lỗi được thiết kế để được chụp bởi NSError thường là lỗi người dùng (hoặc có thể được hiển thị cho người dùng), thường có thể được khôi phục từ (do đó -presentError:NSErrorRecoveryAttempting), và thường là lỗi dự kiến ​​hoặc có thể dự đoán được (như cố gắng mở một tệp mà bạn không có quyền truy cập hoặc cố gắng chuyển đổi giữa các mã hóa chuỗi không tương thích).

NSException được thiết kế cho các lỗi lập trình viên có khả năng gây tử vong. Các lỗi này được thiết kế để biểu thị các lỗ hổng tiềm ẩn trong ứng dụng của bạn, nơi bạn đã không kiểm tra chính xác các điều kiện trước để thực hiện một số thao tác (như cố gắng truy cập chỉ mục mảng vượt quá giới hạn của nó hoặc cố gắng biến đổi một đối tượng bất biến). Phần giới thiệu về số Exception Programming Guide giải thích điều này một chút.

+0

Ohh, OK. Vì vậy, để xử lý tràn tôi nên sử dụng ngoại lệ, vì nó là một lỗ hổng trong ứng dụng của tôi? –

+1

Có, nếu một tình huống bất ngờ không xảy ra với mã đúng. –

+0

Ohh Cảm ơn, nhưng phần thứ hai của câu hỏi, tạo ra lớp Ngoại lệ của riêng tôi là gì? –

Các vấn đề liên quan