1

在ARC中,所有實例變量和局部變量都對它們默認指向的對象有強烈的引用。 我想了解MRR如何工作並遇到此示例。 考慮下面的代碼片段:ARC之前的iOS中的實例變量

// CarStore.h #進口

@interface CarStore : NSObject 

- (NSMutableArray *)inventory; 
- (void)setInventory:(NSMutableArray *)newInventory; 

@end 

// CarStore.m 
#import "CarStore.h" 

@implementation CarStore { 
    NSMutableArray *_inventory; 
} 

- (NSMutableArray *)inventory { 
    return _inventory; 
} 

- (void)setInventory:(NSMutableArray *)newInventory { 
    _inventory = newInventory; 
} 

@end 

//早在main.m文件,讓我們創建和庫存變量分配給CarStore的庫存屬性: INT主(INT argc,const char * argv []){ @autoreleasepool { NSMutableArray * inventory = [[NSMutableArray alloc] init]; [inventory addObject:@「Honda Civic」];

 CarStore *superstore = [[CarStore alloc] init]; 
     [superstore setInventory:inventory]; 
     [inventory release]; 

     // Do some other stuff... 

     // Try to access the property later on (error!) 
     NSLog(@"%@", [superstore inventory]); //DANGLING POINTER 
    } 
    return 0; 
} 

在main方法的最後一行的庫存屬性是一個懸擺指針,因爲該對象已在早些時候發佈的main.m.現在,超級對象對數組的引用很弱。

這是否意味着在ARC之前,實例變量在默認情況下具有弱引用,我們不得不使用retain來聲明強引用?

回答

0

在ARC之前,它們默認爲__unsafe_unretained。與ARC一起引入了弱點。