English 中文(简体)
NSData memory not free - ARC
原标题:NSData memory not freeing - ARC

我看不出一个问题。 多吨搜寻,并尝试了约50种不同变数,但迄今没有ice。 这里是我的困境。

我有3种方法。 我的“电文”号反对装货时,当用户作改动时,就打了另一台,在用户离开网页时,打上了最后一个。

第一种方法:

- (void)captureInitialLinesTexture {
@autoreleasepool {
    self.initialLinesTextureCaptured = TRUE;
    GLubyte *buffer =(GLubyte *) malloc (1024 * 1024 * 4 * sizeof(GLubyte));
    glPixelStorei(GL_PACK_ALIGNMENT,1) ;
    glReadPixels(0, 0, 1024, 1024, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
    glBindTexture(GL_TEXTURE_2D, [pageTexture name]);
    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1024, 1024, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
    NSData __autoreleasing  *tempData = [NSData dataWithBytes:buffer length:1024*1024*4*sizeof(GLubyte)];
    if (textureData == nil) {
        textureData = [self.pageController.notebookDoc newTextureInPage:self.page];
    }

    [pageTextures addObject:tempData];
    if ([pageTextures count] > 5) {
        [pageTextures removeObjectAtIndex:0];
    }
    textureData.textureData = tempData;
    textureData.page = self.page;
    self.page.texture = textureData;
    self.page.lastLineId = [NSNumber numberWithInt:self.pageController.newLineId - 1];
    [self.pageController saveNotebookWithUndo:FALSE];
    free((GLubyte*)buffer);
  }
}

第二种方法:

-(void)capturePageTexture {
@autoreleasepool {
    GLubyte *buffer =(GLubyte *) malloc (1024 * 1024 * 4 * sizeof(GLubyte));
    glPixelStorei(GL_PACK_ALIGNMENT,1) ;
    glReadPixels(0, 0, 1024, 1024, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
    NSData __autoreleasing  *tempData = [NSData dataWithBytes:buffer length:1024*1024*4*sizeof(GLubyte)];
    [pageTextures addObject:tempData];
    if ([pageTextures count] > 5) {
        [pageTextures removeObjectAtIndex:0];
    }
    free((GLubyte*)buffer);
  }
}

最后一种方法:

-(void)attemptInstantPageTextureCapture {
  if ([pageTextures count] > 0) {
      self.page.texture.textureData = [pageTextures lastObject];
      self.page.lastLineId = [NSNumber numberWithInt:self.pageController.newLineId - 1];
      [self.pageController saveNotebookWithUndo:FALSE];
  }
  [pageTextures removeAllObjects];
  pageTextures = [NSMutableArray arrayWithCapacity:0];
}

我的问题是NSData*tempData变量。 出于某种原因,其中一人在我的意见书被删除(通过分配文件披露)之后随意hang。

如果我装上了这本书,就会发现InitialLinesTexture。 然后,我可以在每台中风后增加大中风和捕捉PageTexture的火力,把多达5个NSData变量保留在一个NSMutableArray中。 当我离开这封信件时,国家情报和安全局被豁免。

如今,它在那里获得了头部禁止入墙。 分配给NSData的资金总规模相同,在这一情况下为4mb。 当页数时,我有1 4mb的配量。 如果我登上了笔中风,我可以再接再花5个。 然后,当我离开第1页意见时,4mb分配款(NSData)中多达5项已经获释,但我总是剩下1项。 如果我接着把树木用在仪器上,则从第一个方法或第二种方法中随意说。 为什么没有问题把储存在阵列中的5个NSData倾销,但出于某种原因,1个NSData在其他地方活着。 此外,这种神秘的NSData是随机的。

Like I said, I have searched and searched and cannot find a solution to this problem. 4MB of memory is obviously huge, so any leaks of this sort will kill the app over time.

Allocation from one attempt: Allocation from one attempt

Call Tree for that attempt: Call tree for that attempt

Allocation for another attempt: Allocation for another attempt

Call Tree for other attempt: Call Tree for other attempt

Same exact code fires every time, and every time it is random which NSData stays alive. Anyone have any idea what I am doing wrong? the "page" and "textureData" variables are NSManagedObjects in case you are wondering. As far as things I have tried:

在NSData物体上的所有物体,然后打电话:length:

InitWithBytes noCopy:Length: - not calls free(GLubyte*buffer);

InitWithBytes noCopy:Length:free 当Done:-没有打电话(GLubyte*)

NSData级以上两项尝试的方法版本

不使用@autoreleaserix

不使用__autoreleasing for var declaration

第2页

1. 第2条 卸下导航冷却机

利用__strong,通过 page阵阵阵阵,将所有NSData定为 n或 null。

如上文所述,这都是在一页电文中进行的,该电文是一页电文中的许多种类之一,该电文被推上,随后被一名导航控制员挤出。 一俟《意见书》(PageView 唯一超级观点)被挤出纳夫,就仍有一个随机的NSData拨款。

任何建议都将受到高度赞赏。 就上述核心数据要素而言,该守则与计划完全一致。 唯一的一个问题是,草原为NSData分配。

最佳回答

问题一经解决,但图一显示,如果其他人有同样的问题,情况会发生。 从根本上说,问题是,分配给核心数据实体的NSData物体和核心数据在公布自己的记忆时处于控制之下。 因此,虽然该法典似乎很完善,但核心数据仍保留在NSData物体上,其范围已超出,而 run木(ARC通常会ick)。

为了解决这一问题,我们只是把国家可持续发展数据库保存到一个档案中,并改变了模型,以便核心数据实体能够控制档案路径(NSString)而不是像化数据(NSData)。

问题解决:

问题回答

。 每当它分配给一对一对一线时,就可自由使用。 就此修改你的法典:

dispatch_async(dispatch_get_main_queue(), ^{
    // malloc and whatever other code goes here...
});

关键词的“美丽”没有做你认为的。 它用于载有未启用的点子的过点人,用于最初采用的方法。 那么,这些方法知道,它们不会保留其固有的价值,因为它的唯一目的是返回使用呼吁方法。 在此情况下,你不需要(违约的强人将被罚款,一旦超出范围,将予以释放)。 当你删除这些关键词时,错误是否完全相同?





相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...

热门标签