- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个 cocoa 应用程序,我需要找出文件/目录的图标图像。我用它来从给定路径获取图标图像。
NSImage *image = [[NSWorkspace sharedWorkspace] iconForFile:path];
该方法在整个应用程序中隐性调用。应用程序分配的内存随着我使用应用程序的次数而增加。当我查找内存泄漏时使用仪器,我发现上述方法造成了 100% 的内存泄漏。我怎样才能消除这个内存泄漏,或者他们有任何其他方式为什么我可以获得图标图像和内存不会成为问题。请帮助我。谢谢
编辑:
这是我调用此方法的方法。
-(WEFile *)fileAtPath:(NSString *)filePath
{
WEFile *file = [[WEFile alloc] init];
file.fIconImage = [workSpace iconForFile:filePath];
file.Name = [fileManager displayNameAtPath:filePath];
file.type = [workSpace localizedDescriptionForType:[workSpace typeOfFile:filePath error:&error]];
NSDictionary *detailDict = [fileManager attributesOfItemAtPath:filePath error:&error];
file.modificationDate = [ Utility createDateFormat:[detailDict objectForKey:NSFileModificationDate]];
file.creationDate = [ Utility createDateFormat:[detailDict objectForKey:NSFileCreationDate]];
file.Size = [[detailDict objectForKey:NSFileSize] integerValue];
file.fPath = filePath;
NSDictionary *metaDict = [self metadataForFileAtPath:filePath];
file.addedDate = [ Utility createDateFormat:[metaDict objectForKey:@"kMDItemDateAdded"]];
file.lastOpenedDate = [ Utility createDateFormat:[metaDict objectForKey:@"kMDItemLastUsedDate"]];
return [file autorelease];
}
从另一个递归调用方法 fileAtPath,并且 WEFile 类对象存储在数组中。并显示在表格 View 中。
编辑2:这是我调用 fileAtPath 方法的代码。当表选择传递目录路径作为参数时,会调用此方法directoryAtPath。
-(WEDirectory *)directoryAtPath:(NSString *)dirPath
{
WEDirectory *dir = [[[WEDirectory alloc] init] autorelease];
NSArray *childArray = [self getContentsWithinDirectory:dirPath];
if (childArray && [childArray count]>0)
{
for (int i = 0; i<[childArray count]; i++)
{
NSURL *fileURL = [childArray objectAtIndex:i];
NSString *filePath = [self getPathFromURL:fileURL];
filePath = [filePath stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
BOOL isDir;
BOOL success = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
if (!success)
{
continue;
}
if(isDir)
{
WEDirectory *childDir = [[WEDirectory alloc] init] ;
childDir.dIconImage = [workSpace iconForFile:filePath];
childDir.Name = [fileManager displayNameAtPath:filePath];
childDir.type = [workSpace localizedDescriptionForType:[workSpace typeOfFile:dirPath error:&error]];
NSDictionary *detailDict = [fileManager attributesOfItemAtPath:filePath error:&error];
childDir.modificationDate = [ Utility createDateFormat:[detailDict objectForKey:NSFileModificationDate]];
childDir.creationDate = [ Utility createDateFormat:[detailDict objectForKey:NSFileCreationDate]];
childDir.Size = [[detailDict objectForKey:NSFileSize]integerValue];
childDir.dPath = filePath;
[dir.childsArray addObject:childDir];
[childDir release];
}
else
{
WEFile *childFile = [self fileAtPath:filePath];
[dir.childsArray addObject:childFile];
}
}
}
return dir ;
}
最佳答案
这不会导致我的代码中出现内存泄漏 - 使用泄漏/分配进行检查:
GAppSettings.h
你的 WEFile 类
NSImage *gAppIcon;
@property (readwrite, retain) NSImage *gAppIcon;
*.m@synthesize gAppIcon;
在 ->init
gAppIcon = nil;
在 -> dealloc
[ gAppIcon release];
我还用于存储和恢复->initWithCoder
self.gAppIcon = [ decoder decodeObjectForKey:@"gAppIcon"];
->encodeWithCoder
[ coder encodeObject: [ self gAppIcon] forKey: @"gAppIcon"];
和
- ( id ) copyWithZone: ( NSZone *)zone
{
return self;
}
图标在另一个类中频繁加载:
GAppSettings *appSettings = [ [ [GAppSettings alloc] init] autorelease];
...
NSImage *appIcon = [ [ NSWorkspace sharedWorkspace] iconForFile:completeAppPath];
[ appSettings setGAppIcon:appIcon];
...
return appSettings;
然后添加到数组中...
关于objective-c - cocoa [[NSWorkspace 共享工作空间] iconForFile :filePath caused memory leaks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841194/
我想在浏览器中打开一个 url,但出现此错误: Use of unresolved identifier NSWorkspace 我的代码: if let url = URL(string: "htt
我尝试了下面的代码,它对我来说工作得很好。我也能够启动邮件应用程序。 //Note the below path is coming from bundle identifier of Mail AP
我在 Google 上未能找到此问题的答案。我正在 Cocoa 中构建一个命令行实用程序,当我尝试创建 NSWorkspace 的实例时我收到编译器错误。这是我在 main.m 中实现的代码,这非常简
我有一个 Cocoa 应用程序和一个启动代理。启动代理使用以下方式启动应用程序launchAppWithBundleIdentifier:方法调用。 在我的应用程序中,我想检查应用程序是由用户启动的(
我想获取 MacO 中所有正在运行的进程的列表。 当我使用时 [myWorkspace runningApplications]; 我仅获取当前用户应用程序的列表。 如何找出所有进程的列表,包括 ro
我在文件夹上使用 NSWorkSpace setIcon:forFile:options:。 但是,虽然每次使用 API 时 API 都会返回 success(true),但有时文件夹上的图标不会更新
从 cocoa 应用程序中,我需要将文件移至垃圾箱,使用 NSWorkspaceRecycleOperation 这非常简单,但垃圾箱中的文件无法恢复到其原始位置。 恢复似乎只能通过 Finder 进
当我切换应用程序时我的功能没有被执行: public class ItemObserver: NSObject { @objc public func recievedNotification(n
目前,我有这个。 var workspace = NSWorkspace.shared() do { try workspace.setDesktopImageURL(destinati
我正在尝试使用 open 启动应用程序通过 Swift 工具。我有两个单独的实现,一个是 NSWorkspace.shared.openApplication(at:configuration)适用于
我是一名经验丰富的 C/C++ 程序员,但对 ObjC++ 不熟悉。我正在尝试在 Mac OSX 项目中捕获 NSWorkspacedidmountnofification。 我将回调添加到我的应用委
我的应用程序能够提取 .deb 文件,但前提是您通过应用程序中的按钮指定了位置。但我希望能够只需单击 .deb 文件并打开我的应用程序,运行我已有的操作,然后在完成后退出。现在我正在使用 NSWors
我有以下代码来启动地址簿,现在效果很好,但是有没有办法可以在正在运行的应用程序之前启动它? [[NSWorkspace sharedWorkspace] openFile:@"/Application
我的要求是打开一个 pdf/ppt 等文件并在 20 分钟后关闭它。感谢 NSWorkspace,我能够正确打开这些文件。但我怎样才能关闭这些文件呢? NSWorkspace 似乎没有 close 方
我使用这一行在浏览器中打开一个网址。 [[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString:url]]; 我想减小 NSWorksp
我不确定我是否在这里做错了什么: 我正在 awakeFromNib 中使用此代码段注册工作区通知 [[[NSWorkspace sharedWorkspace] notificationCenter]
在launchedApplications函数的NSWorkspace文档中,它说:“强烈建议您使用 NSWorkspace runningApplications 方法和 NSRunningAppl
我的要求是打开一个 pdf/ppt 等文件并在 20 分钟后关闭它。感谢 NSWorkspace,我能够正确打开这些文件。但我怎样才能关闭这些文件呢? NSWorkspace 似乎没有 close 方
终端的以下工作: open -a cyberduck ftp://anonymous@mirror.switch.ch/mirror 并打开 FTP 站点,表明它正在处理其参数。 但是下面的代码却没有
我正在尝试进行窗口管理,但我需要在单独的线程上运行代码。 我需要做的第一件事是订阅应用程序通知,如下所示: NSNotificationCenter *nc = [[NSWorkspace share
我是一名优秀的程序员,十分优秀!