Gửi một thông điệp đến giá trị nil có nghĩa là gì và điều đó thực sự hữu ích như thế nào?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
19 lượt xem
Objective-C master

Một điều bạn nên rõ ràng là trong Objective-C, bạn không gọi một phương thức trên một đối tượng, mà bạn gửi một thông điệp (message) đến một đối tượng. Runtime (thời gian chạy) sẽ tìm phương thức và gọi nó. Một thông điệp được gửi đến một đối tượng nil là hoàn toàn chấp nhận được trong Objective-C, nó được xử lý như một thao tác không làm gì cả. Không có cách nào để đánh dấu nó là một lỗi vì nó không phải là lỗi, thực tế nó có thể là một tính năng rất hữu ích của ngôn ngữ.

Trong Objective-C, việc gửi một thông điệp đến giá trị nil là hợp lệ - nó đơn giản không có tác dụng tại runtime. Có một số mẫu thiết kế trong Cocoa tận dụng sự thật này. Giá trị trả về từ một thông điệp gửi đến giá trị nil cũng có thể hợp lệ:

  • Nếu phương thức trả về một đối tượng, thì một thông điệp gửi đến nil trả về 0 (nil), ví dụ: Person motherInLaw = [[aPerson spouse] mother]; Nếu spouse của aPersonnil, thì mother được gửi đến nil và phương thức trả về nil.
  • Nếu phương thức trả về bất kỳ kiểu con trỏ nào, bất kỳ số nguyên nhỏ hơn hoặc bằng sizeof(void*), một số dấu chấm động float, double, long double hoặc long long, thì một thông điệp gửi đến nil trả về 0.
  • Nếu phương thức trả về một struct, theo định nghĩa của Hướng dẫn Gọi Hàm ABI trên Mac OS X để trả về trong thanh ghi, thì một thông điệp gửi đến nil trả về 0.0 cho mỗi trường trong cấu trúc dữ liệu. Các loại dữ liệu struct khác sẽ không được điền vào giá trị 0.
  • Nếu phương thức trả về bất kỳ loại giá trị nào khác ngoại trừ các loại giá trị được đề cập ở trên, giá trị trả về của một thông điệp gửi đến nilundefined.
{{login.error}}