Tôi đang cố gắng hoàn thành câu đố.
__strong
là mặc định cho tất cả các con trỏ đối tượng có thể truy xuất được Objective-C như NSObject, NSString, v.v. Đây là một tham chiếu mạnh. ARC cân bằng nó với một -release
ở cuối phạm vi.
__unsafe_unretained
bằng cách cũ. Nó được sử dụng cho một con trỏ yếu mà không giữ lại đối tượng có thể truy xuất được.
__weak
giống như __unsafe_unretained
ngoại trừ việc nó là một tham chiếu yếu tự động zeroing nghĩa là con trỏ sẽ được đặt thành nil ngay khi đối tượng được tham chiếu được phân bổ. Điều này giúp loại bỏ nguy cơ con trỏ treo lơ lửng và lỗi EXC_BAD_ACCESS.
Nhưng chính xác thì __autoreleasing
tốt cho điều gì? Tôi đang gặp khó khăn khi tìm các ví dụ thực tế về thời điểm tôi cần sử dụng vòng loại này. Tôi tin rằng nó chỉ dành cho các hàm và phương thức mong đợi một con trỏ con trỏ chẳng hạn như:
- (BOOL)save:(NSError**);
hoặc là
NSError *error = nil;
[database save:&error];
theo ARC phải được khai báo theo cách này:
- (BOOL)save:(NSError* __autoreleasing *);
Nhưng điều này quá mơ hồ và tôi muốn hiểu đầy đủ tại sao . Đoạn mã mà tôi tìm thấy đặt __autoreleasing ở giữa hai ngôi sao, điều này trông kỳ lạ đối với tôi. Kiểu là NSError**
(một con trỏ trỏ tới NSError), vậy tại sao lại đặt __autoreleasing
ở giữa các ngôi sao chứ không chỉ ở phía trước NSError**
?
Ngoài ra, có thể có những tình huống khác mà tôi phải dựa vào __autoreleasing
.