Objective c 使用IOS 6进行ARC内存管理
我正在通过IOS(第三版)的大书呆子农场。我在ARC内存管理章节。它试图解释保留周期,并让我们修改一个简短的控制台应用程序,如下所示: BNRItem的标题:Objective c 使用IOS 6进行ARC内存管理,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,我正在通过IOS(第三版)的大书呆子农场。我在ARC内存管理章节。它试图解释保留周期,并让我们修改一个简短的控制台应用程序,如下所示: BNRItem的标题: @interface BNRItem : NSObject { NSString *itemName; NSString *serialNumber; int valueInDollars; NSDate *dateCreated; BNRItem *containedItem; BNRI
@interface BNRItem : NSObject
{
NSString *itemName;
NSString *serialNumber;
int valueInDollars;
NSDate *dateCreated;
BNRItem *containedItem;
BNRItem *container;
}
+ (id)randomItem;
- (void)setItemName:(NSString *)str;
- (NSString *)itemName;
- (void)setSerialNumber:(NSString *)str;
- (NSString *)serialNumber;
- (void)setValueInDollars:(int) i;
- (int)valueInDollars;
- (void)setContainedItem:(BNRItem *)i;
- (BNRItem *)containedItem;
-(void)setContainer:(BNRItem *)i;
- (BNRItem *)container;
- (NSDate *)dateCreated;
- (id)initWithItemName:(NSString*)name valueInDollars:(int)value serialNumber:(NSString *)sNumber;
- (id)initWithItemName:(NSString *)name andSerialNumber:(NSString *)sNumber;
@end
主文件:
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSMutableArray *items = [[NSMutableArray alloc]init];
BNRItem *backpack = [[BNRItem alloc] init];
[backpack setItemName:@"Backpack"];
[items addObject:backpack];
BNRItem *calculator = [[BNRItem alloc]init];
[calculator setItemName:@"Calculator"];
[items addObject:calculator];
[backpack setContainer:calculator];
NSLog(@"Setting items to nil");
items = nil;
}
return 0;
}
在这之后,它说:“根据我们目前对内存管理的理解,当items设置为nil时,两个bnritem都应该与其实例变量一起销毁”。在此之前,当我们的bNitem被销毁时,它让我们覆盖(作废)dealloc打印出来
所以我运行它,我想看看,因为背包现在有一个强大的参考计算器,不会被摧毁。现在在控制台中,我看到两者都被破坏了,但我认为这是因为它们在应用程序结束时被破坏了。当我在将项目设置为零后设置断点时,没有任何东西被破坏。这就是书上说的应该发生的事。。。但这让我把容器设置为
__weak BNRItem *container
然后当我运行它时,仍然没有任何东西被破坏。我假设,因为仍然有指向它的指针,我没有设置为零?即使书中没有提到在这一点上这样做。所以我理解书中的解释(我想),但实际上它并没有发生。我相信自动完成
[backpack setContainer:calculator]
应该是
[backpack setContainedItem:calculator]
+1查找错误-您也应该接受您的答案,以便在主页上我们都可以看到问题已得到回答:)是的,对不起。我说我要等两天,然后我就忘了。