Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从仪器读取内存分配结果_Ios_Objective C_Iphone_Instruments_Gdc - Fatal编程技术网

Ios 从仪器读取内存分配结果

Ios 从仪器读取内存分配结果,ios,objective-c,iphone,instruments,gdc,Ios,Objective C,Iphone,Instruments,Gdc,我正在我的iOS应用程序上运行一个内存分配探查器,我检测到我的应用程序中当前创建了8MB的内存,并且仍然存在。显然出了什么问题。所以我深入研究了一下,下面是我可以展示给你的图片: 知道这是为什么吗?这似乎是一个自动释放的对象,所以它不应该被释放而不是生活在内存中吗 下面是我调用函数parseTagsInComment的方式: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSA

我正在我的iOS应用程序上运行一个内存分配探查器,我检测到我的应用程序中当前创建了8MB的内存,并且仍然存在。显然出了什么问题。所以我深入研究了一下,下面是我可以展示给你的图片:

知道这是为什么吗?这似乎是一个自动释放的对象,所以它不应该被释放而不是生活在内存中吗

下面是我调用函数parseTagsInComment的方式:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *commentsText = [NSString stringWithFormat:@"%@ %@", self.imageComment_.username_, self.imageComment_.text_];

    NSRange range;
    range.location = 0;
    range.length = commentsText.length;

    NSMutableAttributedString* attrStr = [[NSMutableAttributedString alloc] initWithString:commentsText];
    [attrStr setFont:[UIFont fontWithName:@"HelveticaNeue" size:14] range:range];
    self.commentAttributedString_ = attrStr;
    [attrStr release];


    dispatch_async(dispatch_get_main_queue(), ^{
        [weakSelf.commentsText_ setAlpha:0.0];
        [weakSelf.commentsPostedTime_ setAlpha:0.0];
        [weakSelf.commentsText_ setFrameWidth:weakSelf.contentView.frameWidth - weakSelf.profilePicture_.frameWidth - kCommentsPadding];
        [weakSelf.commentsText_ setFrameHeight:weakSelf.imageComment_.commentHeight_ - 30];
        [weakSelf.commentsText_ setAttributedString:weakSelf.commentAttributedString_];
        [weakSelf.commentsText_ setLinkColor:weakSelf.textColor_];

        NSString *timePosted = [NSString timestampToString:weakSelf.imageComment_.createdTime_];
        CGSize commentsTimeSize = [timePosted sizeWithFont:weakSelf.commentsPostedTime_.font constrainedToSize:CGSizeMake(weakSelf.commentsText_.frameWidth, 50)];
        [weakSelf.commentsPostedTime_ setText:timePosted];


        [UIView animateWithDuration:0.3 animations:^{
            [weakSelf.commentsText_ setAlpha:1.0];
            [weakSelf.commentsPostedTime_ setAlpha:1.0];
        } completion:^(BOOL finished){
            [weakSelf parseTagsInComment];
        }];
    });
    [pool release]; 
});

我认为parseTagsInComment函数要么是通过一些委托方法调用的,要么是从工作线程的执行路径调用的(不是在主线程上)

所以,函数中的第一行应该创建一个自动释放池,最后一行应该销毁该池

-(void) parseTagsInComment
{
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   //Body of your function
   [pool release];
}

我认为parseTagsInComment函数要么是通过一些委托方法调用的,要么是从工作线程的执行路径调用的(不是在主线程上)

所以,函数中的第一行应该创建一个自动释放池,最后一行应该销毁该池

-(void) parseTagsInComment
{
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   //Body of your function
   [pool release];
}

您确定这些百分比不代表每行代码所花费的时间吗?(即,这是内存数据而不是分析数据)?@Turix我怎么知道?我敢肯定那是记忆。。因为我在仪器上运行了分配测试,而不是在时间档案上运行。是的,分配(或泄漏)应该是您想要的,您是对的。(虽然我问这个问题的原因是因为屏幕截图中的百分比对我来说似乎更合理。)顺便说一句,这与我从xcode运行它时从分配或配置文件中得到的输出不一样,所以很难说。这个输出是在双击CFString(malloc)之后得到的在那里它使用了大部分的memory@adit如何使用mem百分比获得代码视图?您确定这些百分比不代表每行代码所花费的时间吗?(即,这是内存数据而不是分析数据)?@Turix我怎么知道?我敢肯定那是记忆。。因为我在仪器上运行了分配测试,而不是在时间档案上运行。是的,分配(或泄漏)应该是您想要的,您是对的。(虽然我问这个问题的原因是因为屏幕截图中的百分比对我来说似乎更合理。)顺便说一句,这与我从xcode运行它时从分配或配置文件中得到的输出不一样,所以很难说。这个输出是在双击CFString(malloc)之后得到的在那里它使用了大部分的memory@adit如何使用mem百分比获得代码视图?实际上,它是在dispatch\u async上调用的。。我添加了一些代码above@adit你试过他的建议了吗?(我认为值得一试——这对我来说是有意义的,因为在主池的下一次刷新之前,
dispatch\u async
上自动释放的内存可能不会被释放,而您在分配测试中可能还没有得到释放。)@Turix是的,我认为这似乎解决了我的问题。。但是,我可以得到关于这个自动发布的更详细的解释吗?异步可能在邮件池的下一次刷新之前不会发布。。我也需要理解这一点,而不仅仅是使用solution@adit查看此线程:在您的情况下,我猜您看到的是分配工具中的“时间窗口”,它不包括调度线程的自动释放池的排放。实际上,它是在调度异步上调用的。。我添加了一些代码above@adit你试过他的建议了吗?(我认为值得一试——这对我来说是有意义的,因为在主池的下一次刷新之前,
dispatch\u async
上自动释放的内存可能不会被释放,而您在分配测试中可能还没有得到释放。)@Turix是的,我认为这似乎解决了我的问题。。但是,我可以得到关于这个自动发布的更详细的解释吗?异步可能在邮件池的下一次刷新之前不会发布。。我也需要理解这一点,而不仅仅是使用solution@adit看看这个线程:在您的例子中,我猜您看到的是分配工具中的一个“时间窗口”,它不包括调度线程的自动释放池。