我看不出一个问题。 多吨搜寻,并尝试了约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:
Call Tree for that attempt:
Allocation for another 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分配。