各位好,我初学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会影响内存?如果可以我希望听到您的解答或者直接将相关资料贴上来也可以。在这我先谢谢您!