弱引用指向的对象释放,测试打印有疑问

SealedBook 2013-06-30 10:02:25
各位好,我初学iOS,遇到的问题是这样:新建一个工程,使用自动垃圾回收,之后我声明了一个类,该类中的实例可以引用自己。代码如下:

#import <Foundation/Foundation.h>

@interface BNRItem : NSObject
{
int valueInDollars;
BNRItem *containedItem;
__weak BNRItem *container;
}
- (void) setContainedItem:(BNRItem*)value;
- (void) setContainer:(BNRItem*)value;
- (BNRItem*) container;

在main.m中的测试代码如下:

#import <Foundation/Foundation.h>
#import "BNRItem.h"

int main(int argc, const char * argv[])
{
@autoreleasepool {
BNRItem *bnr1 = [[BNRItem alloc] initWithItemName:@"bnr1" serialNumber:@"bnr100" valueInDollars:100];
BNRItem *bnr2 = [[BNRItem alloc] initWithItemName:@"bnr2" serialNumber:@"bnr200" valueInDollars:200];
[bnr1 setContainedItem:bnr2];
[bnr2 setContainer:bnr1];
//第一个NSLog
NSLog(@"Container:%@",[bnr2 container]);
bnr1 = nil;
//第二个NSLog
NSLog(@"Container:%@",[bnr2 container]);
}
return 0;
}


各位,我的问题来了,如果我在main.m的代码里把第一个NSLog注释掉,程序会和书上的结果一样,也就是说只输出一个null。
但是如果第一个NSLog不注释掉,那么会连续输出两个BNRItem对象。并且指针地址相同(<BNRItem: 0x10010bdb0> )。

我想问,这种情况是跟自动回收有关吗?NSLog会影响内存?如果可以我希望听到您的解答或者直接将相关资料贴上来也可以。在这我先谢谢您!
...全文
128 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SealedBook 2013-06-30
  • 打赏
  • 举报
回复
补充一下,我用的XCode 4.6.3

29,049

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧