NSParameterAssert là gì?


Câu trả lời:


115

Đây là một cách đơn giản để kiểm tra xem tham số của phương thức có phải là nil0. Vì vậy, về cơ bản, bạn sử dụng nó để tạo điều kiện tiên quyết, nói rằng một số tham số phải được đặt. Nếu nó không được đặt, macro sẽ khiến ứng dụng ngừng hoạt động và tạo ra lỗi trên dòng đó. Vì thế:

- (void)someMethod:(id)someObjectThatMustNotBeNil
{
  // Make sure that someObjectThatMustNotBeNil is really not nil
  NSParameterAssert( someObjectThatMustNotBeNil );
  // Okay, now do things
}

Tiền điều kiện là một cách đơn giản để đảm bảo rằng các phương thức / API đang được lập trình viên gọi một cách chính xác. Ý tưởng là nếu một lập trình viên vi phạm điều kiện tiên quyết, ứng dụng sẽ kết thúc sớm - hy vọng là trong quá trình gỡ lỗi và thử nghiệm cơ bản.

NSParameterAssert có thể được sử dụng để kiểm tra xem bất kỳ biểu thức nào đánh giá là đúng, tuy nhiên, vì vậy bạn cũng có thể sử dụng nó như sau:

NSParameterAssert( index >= 0 ); // ensure no negative index is supplied

Tài liệu của Apple cho macro NSParameterAssert ()


1
Đảm bảo nắm bắt các trường hợp ngoại lệ trong mã của bạn, nếu không, nếu khẳng định là đúng, nó sẽ làm ứng dụng của bạn bị lỗi.
lucius

14
@lucius: Các cảnh báo không được sử dụng để kiểm tra các điều kiện trong một ứng dụng phân tán, chúng ở đó để bắt lỗi trong quá trình phát triển. Việc khiến một thứ gì đó gặp sự cố trong điều kiện không tốt (như ổ cắm không được kết nối với Nib), thay vì âm thầm hỏng hóc, cho phép bạn tìm ra sự cố sớm. Nhiều người vô hiệu hóa chúng tại thời điểm phân phối thông qua macro hoặc #ifdefs.
Brad Larson

5
@lucius - Mục đích là làm cho ứng dụng ngừng hoạt động khi các điều kiện tiên quyết không được đáp ứng. Điều này cho phép lập trình viên biết ngay rằng họ đã làm sai điều gì đó. Để đảm bảo rằng các xác nhận trong Cocoa không được đánh giá, bạn có thể xác định macro NS_BLOCK_ASSERTIONS. Điều này vô hiệu hóa chúng, nhưng ý tưởng là để giữ cho các tác dụng phụ hoặc mã chậm thực thi hơn là bảo vệ khỏi sự cố - bởi sản xuất, các xác nhận sẽ không bao giờ kích hoạt nếu được sử dụng đúng cách.
Jason Coco

1
Có thể loại bỏ các xác nhận này một cách đơn giản khi thực hiện xây dựng sản xuất. IMHO được sử dụng tốt nhất trong quá trình phát triển để bắt lỗi lập trình (như đã đề cập trong nhận xét ở trên).
Johan Karlsson

5
@JohanKarlsson Có thể và được đặt theo mặc định trong các phiên bản mẫu hiện tại (điều này đã trở lại khá xa) trong Releasecấu hình. Bạn có thể kiểm soát điều này bằng cách đặt cài đặt bản ENABLE_NS_ASSERTIONSdựng trong các phiên bản mới hơn của Xcode hoặc bằng cách xác định NS_BLOCK_ASSERTIONSmacro và đặt nó thành 1. Trong Xcode 5 có cài đặt dự án * Bật tính năng Foundation Assertions` đặt cài đặt bản dựng và mặc định thành Yestrong DebugNotrong Releasecấu hình.
Jason Coco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.