弱引用指向的对象释放,测试打印有疑问
各位好,我初学iOS,遇到的问题是这样:新建一个工程,使用自动垃圾回收,之后我声明了一个类,该类中的实例可以引用自己。代码如下:
在main.m中的测试代码如下:
各位,我的问题来了,如果我在main.m的代码里把第一个NSLog注释掉,程序会和书上的结果一样,也就是说只输出一个null。
但是如果第一个NSLog不注释掉,那么会连续输出两个BNRItem对象。并且指针地址相同(<BNRItem: 0x10010bdb0> )。
我想问,这种情况是跟自动回收有关吗?NSLog会影响内存?如果可以我希望听到您的解答或者直接将相关资料贴上来也可以。在这我先谢谢您!
#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会影响内存?如果可以我希望听到您的解答或者直接将相关资料贴上来也可以。在这我先谢谢您!
...全文
相关推荐
打印机测试用文件
打印机测试是确保打印机正常工作和优化输出质量的重要环节。这些测试用文件通常包含特定的图案和文字,旨在挑战打印机在不同条件下的性能,包括黑白、灰度和彩色打印。
打印机测试图片。cmyk测试。颜色测试。
在IT领域,打印机测试图片和CMYK颜色测试是确保打印质量的重要环节。
3Dprint:3D打印设置,材料,测试,对象
3Dprint:3D打印设置,材料,测试,对象"这个标题揭示了本话题将涵盖3D打印过程中的关键要素,包括打印机配置、所用材料、质量测试以及不同3D打印对象的制作方法。
6色打印机测试条 ,打印测试
6色打印机测试条就是针对这类打印机而设计的,它可以帮助用户确保打印机的每一个喷头都能正常工作,输出准确的颜色。测试条由一系列不同颜色的小块组成,这些颜色涵盖了打印机能够输出的整个色域。
打印机测试图片验证打印头的质量
通过特定的测试图片,我们可以对打印机的打印头进行详细的性能评估和校准。


