Theo clang documentation, một phương thức trả id
được ngầm nổi tiếng trở lại instancetype
khi nó là một phương pháp lớp học bắt đầu với new
hoặc alloc
, hoặc một phương pháp dụ bắt đầu với retain
, autorelease
, init
, hoặc self
.Liệu instancetype có nên được sử dụng trên các phương thức phân bổ/new/init không?
Để đảm bảo tính nhất quán, những phương pháp này cũng có được viết để trả lại rõ ràng instancetype
trong mã mới không?
- (instancetype)init {
self = [super init];
if (self) {
// perform initialization
}
return self;
}
Có tài liệu nào về lý do tại sao hoặc tại sao không hoặc bất kỳ lý do nào? Dường như trong trường hợp này nó được hiểu chính xác giống như trình biên dịch.
Giá trị mặc định là "id", không phải là instancetype. Trả về instancetype cung cấp cho bạn nhiều loại kiểm tra hơn. Không có sự khác biệt nếu mã của bạn là chính xác, nhưng trình biên dịch có thể bỏ sót các lỗi nếu bạn trả về id. – gnasher729
@ gnasher729 Xem tài liệu về instancetype trong llvm (http://clang.llvm.org/docs/LanguageExtensions.html). 'instancetype' được tự động suy ra cho một số phương thức nhất định, và kết quả là,' instancetype' là mặc định trong những trường hợp đó. – bbum