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來聲明強引用?