ฉันกำลังพยายามไขปริศนาให้เสร็จ
__strong
เป็นค่าเริ่มต้นสำหรับพอยน์เตอร์อ็อบเจ็กต์ Objective-C ที่เก็บรักษาได้เช่น NSObject, NSString และอื่น ๆ ซึ่งเป็นการอ้างอิงที่ชัดเจน ARC จะปรับสมดุลกับ-release
จุดสิ้นสุดของขอบเขต
__unsafe_unretained
เท่ากับวิธีเก่า ใช้สำหรับตัวชี้ที่อ่อนแอโดยไม่ยึดวัตถุที่ยึดได้
__weak
เหมือนกับ__unsafe_unretained
ยกเว้นว่ามันเป็นการอ้างอิงที่อ่อนแอโดยอัตโนมัติซึ่งหมายความว่าตัวชี้จะถูกตั้งค่าเป็นศูนย์ทันทีที่วัตถุที่อ้างอิงถูกยกเลิกการจัดสรร ซึ่งจะช่วยขจัดอันตรายจากตัวชี้อันตรายและข้อผิดพลาด EXC_BAD_ACCESS
แต่สิ่งที่__autoreleasing
ดีสำหรับ? ฉันมีช่วงเวลาที่ยากลำบากในการค้นหาตัวอย่างที่ใช้ได้จริงเกี่ยวกับเวลาที่ฉันต้องใช้คุณสมบัตินี้ ฉันเชื่อว่าเป็นเพียงฟังก์ชันและวิธีการที่คาดว่าจะมีตัวชี้ตัวชี้เช่น:
- (BOOL)save:(NSError**);
หรือ
NSError *error = nil;
[database save:&error];
ซึ่งภายใต้ ARC จะต้องประกาศด้วยวิธีนี้:
- (BOOL)save:(NSError* __autoreleasing *);
แต่นี้เป็นที่คลุมเครือเกินไปและฉันต้องการที่จะเข้าใจว่าทำไม ข้อมูลโค้ดที่ฉันพบคือตำแหน่ง __autoreleasing ระหว่างสองดาวซึ่งดูแปลกสำหรับฉัน ประเภทคือNSError**
(ตัวชี้ตัวชี้ไปที่ NSError) ดังนั้นทำไมจึงวางไว้__autoreleasing
ระหว่างดวงดาวไม่ใช่แค่อยู่ข้างหน้าNSError**
?
นอกจากนี้ยังอาจจะมีสถานการณ์อื่น ๆ __autoreleasing
ที่ฉันจะต้องพึ่งพา