我的应用程序使用石英过滤器将PDF文档中的图像转换为黑白图像:
PDF Document *pdfDocument = [[PDFDocument alloc] initWithURL:[NSURL fileURLWithPath:@"/Users/dan/Desktop/test.pdf"]];
QuartzFilter *quartzFilter = [QuartzFilter quartzFilterWithURL:[[NSBundle mainBundle] URLForResource:@"Black & White" withExtension:@"qfilter"]];
NSDictionary *options = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:quartzFilter, nil] forKeys:[NSArray arrayWithObjects:@"QuartzFilter", nil]];
[pdfDocument writeToFile:@"/Users/dan/Desktop/testResault.pdf" withOptions:options];
Run Code Online (Sandbox Code Playgroud)
不幸的是,在应用过滤器的情况下将文件写入磁盘会导致许多内存泄漏,如下所示:

这是Quartz Framework中的一个错误,还是我在上面的代码中做错了什么?
如果你想,你可以在这里下载我的测试项目:http://www.file-upload.net/download-7293644/PDF---Quartz-Memory-Leak.zip.html
我正在使用ARC.
我有一个图表,其中包含在 x 轴上跨越多天的WeatherKit.HourWeather对象。但是,我想排除夜间时间。看起来我可以使用 ChartXScale 修改器来做到这一点,如下所示:
let myDataSeperatedByHours = arrayWithAllDates.filter { ... }.sorted(...) // Array of WeatherKit.HourWeather objects filtered by isDaylight = true and sorted by date
let allDaytimeDates = myDataSeperatedByHours.map { $0.date } //only the Date objects
Chart {
ForEach(myDataSeperatedByHours, id: \.date) { hourData in
LineMark(
x: .value("hour", hourData.date),
y: .value("value", hourData.value)
)
}
}
.chartXAxis {
AxisMarks(position: .bottom, values: allDaytimeDates) { axisValue in
if let date = axisValue.as(Date.self) {
AxisValueLabel(
"\(Self.shortTimeFormatter.calendar.component(.hour, from: date))"
)
} …Run Code Online (Sandbox Code Playgroud) 在 iOS 16 中,您可以从图像中提升主体或通过移除背景来隔离主体。
您可以在这里看到它的实际效果:https://developer.apple.com/wwdc22/101?time =1101
我想知道这个功能是否也可供开发者在自己的应用程序中使用。人们或许可以训练一种机器学习模型并将其与视觉框架一起使用。
这里有一个关于如何实现这一点的例子,但是苹果的解决方案已经很好了,我不想在有捷径的情况下花时间重新发明轮子。
好的.我正在寻找一种简洁的方法来列出使用[NSSound soundNamed:]播放的系统声音 - 对我而言似乎API没有可用声音列表.
我还用谷歌搜索了这个,发现了一些相当古老且部分已被弃用的资源.如果应用程序应该有一个声音拾取器 - 什么是获得系统提供的声音列表的最佳方法?
这个问题说明了一切.是否包含具有不同dpi(Dot Per Inch)图像的PDF文档?
或者假设如果我知道一张图像的dpi,我就知道整个文件了吗?
我正在创建一个NSTimer:
NSTimer *saveProgressSizeTimer = [[NSTimer alloc]
initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:2.0f]
interval:1.0f
target:self
selector:@selector(myMethod:)
userInfo:myUserInfo
repeats:YES];
Run Code Online (Sandbox Code Playgroud)
但是,计时器不会被触发.该方法不会被调用.如果我打印我的日期,我会得到以下内容:
2012-10-12 15:19:02.786 MyApp [1768:303]发布日期:2012-10-12 13:21:02 +0000
不应该是"2012-10-12 15:21:02"吗?不知怎的,时间错了.但为什么?如果我将时区从UTC/GMT +1小时(我坐在德国)改为另一个,那么日期仍然是2012-10-12 13:19:02再加上两秒.
我究竟做错了什么?
谢谢!
我想弄清楚系统的首选语言,我把它放在系统首选项的顶部.我希望Locale.preferredLanguages或Locale.current将会工作,不幸的是它似乎只返回应用程序包中也支持的那些语言.
我可以使用 iOS 16 / macOS Ventura 中的新 PhotosPicker 获取图像数据。这是我所做的:
PhotosPicker(selection: $selectedPhotosPickerItems, matching: .any(of: [.images]), photoLibrary: .shared()) {
Text("Select photos")
}
.onChange(of: selectedPhotosPickerItems) { newItems in for newItem in newItems {
Task {
if let data = try? await newItem.loadTransferable(type: Data.self) {
... = UIImage(data: data)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要有关这张照片的更多信息。如果我能以某种方式获取 PHAsset,那就太棒了,或者至少是原始创建日期。PHAsset 不符合 Transferable。有没有办法只知道图像数据来获取 PHAsset?也许用哈希?
我想知道这是否是在Cocoa应用程序中避免内存泄漏的正确方法.
我的应用程序有一个更新NSMenu项目的方法:
//Remove and Release old Status Scan Menu:
if ([statusMenuScansMenu numberOfItems] !=0) {
for (NSMenuItem *menueItemToBeReleased in [statusMenuScansMenu itemArray]) {
[statusMenuScansMenu removeItem:menueItemToBeReleased];
[menueItemToBeReleased release];
}
}
//New Status Scan Menu:
for (MyObject* myObject in myArray) {
NSMenuItem * scanMenuItem = [[NSMenuItem alloc] init];
[scanMenuItem setTitle:[myObject name]];
[statusMenuScansMenu addItem:scanMenuItem];
}
Run Code Online (Sandbox Code Playgroud)
如您所见,在添加新项目之前,我删除所有以前的项目并发release送给他们.然后我添加新的.
这是内存管理的最佳方式吗?
如果我在Xcode 4.1中分析我的代码,它会说存在潜在的内存泄漏.