gpt4 book ai didi

cocoa - 纠正 NSView 内存泄漏

转载 作者:行者123 更新时间:2023-12-03 17:39:45 28 4
gpt4 key购买 nike

我需要一些帮助来了解导致我的应用程序泄漏的原因。应用程序使用 ARC。我在窗口上有一个 NSView,用作文件的放置区。当您将文件拖到窗口上时,我会选择路径和文件名以在应用程序的其他方面使用。

当我通过 Instruments 运行应用程序时,一旦启动应用程序就会出现内存泄漏。以下是仪器返回内容快照的链接:

http://f-video.s3.amazonaws.com/leak.jpg

下面是我的自定义类 (dropZone) 的拖放代码。

我需要这方面的教训。我不明白如何读取 Instruments 返回的数据来进行更正。

感谢您的帮助。

@implementation dropZone


- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];

}
return self;
}

- (void)drawRect:(NSRect)dirtyRect {
/*NSRect bounds = [self bounds];
[[NSColor grayColor] set];
[NSBezierPath fillRect:bounds];*/
}

- (NSDragOperation)draggingEntered:(id )sender {
NSPasteboard *pboard;
NSDragOperation sourceDragMask;

sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];

if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
if (sourceDragMask & NSDragOperationLink) {
return NSDragOperationLink;
} else if (sourceDragMask & NSDragOperationCopy) {
return NSDragOperationCopy;
}
}
return NSDragOperationNone;
}

- (BOOL)performDragOperation:(id )sender
{
NSPasteboard *pboard = [sender draggingPasteboard];

if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
// Perform operation using the list of files
NSLog(@"Dragged files");
int i;
for (i = 0; i < [files count]; i++) {


NSLog(@"%@",[files objectAtIndex:i]);




NSString * new = [files objectAtIndex:i];
[[NSApp delegate] updateText:new];
}



}
return YES;
}


@end

最佳答案

通常,当您使用 Instruments 时,您必须了解启动时系统中经常会出现一次性泄漏。

您从不关心 438 字节等一次性泄漏。您只关心连续的泄漏。

要找到这些内容,您可以像平常一样在 Instruments 下启动您的应用程序,但是一旦一切稳定,您就可以在 Instruments 中对其进行快照(例如,进行一次完整的拖放操作,然后进行快照) )。

然后你在快照后再拖放一些,然后看看是否有泄漏。这些是唯一重要的。 (除非你在发布时以某种方式泄漏了 500MB,但事实并非如此。)

enter image description here

关于cocoa - 纠正 NSView 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392744/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com