小编Dan*_*iel的帖子

PDFDocument + Quartz Filter的内存泄漏

我的应用程序使用石英过滤器将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.

pdf macos cocoa quartz-graphics ios5

5
推荐指数
0
解决办法
474
查看次数

Swift Charts:如何仅显示数组中值的值和标签?

我有一个图表,其中包含在 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)

swiftui swiftui-charts

5
推荐指数
1
解决办法
3990
查看次数

如何使用苹果的机器学习将主体从背景中提炼出来?

在 iOS 16 中,您可以从图像中提升主体或通过移除背景来隔离主体。

您可以在这里看到它的实际效果:https://developer.apple.com/wwdc22/101?time =1101

我想知道这个功能是否也可供开发者在自己的应用程序中使用。人们或许可以训练一种机器学习模型并将其与视觉框架一起使用。

这里有一个关于如何实现这一点的例子,但是苹果的解决方案已经很好了,我不想在有捷径的情况下花时间重新发明轮子。

macos image-processing vision ios

5
推荐指数
1
解决办法
1594
查看次数

声音选择器/系统声音列表

好的.我正在寻找一种简洁的方法来列出使用[NSSound soundNamed:]播放的系统声音 - 对我而言似乎API没有可用声音列表.

我还用谷歌搜索了这个,发现了一些相当古老且部分已被弃用的资源.如果应用程序应该有一个声音拾取器 - 什么是获得系统提供的声音列表的最佳方法?

macos xcode cocoa system-sounds nssound

4
推荐指数
1
解决办法
7573
查看次数

PDF文档是否包含具有不同DPI的图像?

这个问题说明了一切.是否包含具有不同dpi(Dot Per Inch)图像的PDF文档?

或者假设如果我知道一张图像的dpi,我就知道整个文件了吗?

pdf poppler dpi

4
推荐指数
1
解决办法
2081
查看次数

NSTimer不会在指定日期被解雇

我正在创建一个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再加上两秒.

我究竟做错了什么?

谢谢!

cocoa objective-c nsdate nstimer

4
推荐指数
1
解决办法
3260
查看次数

如何获取应用程序不支持的用户首选语言

我想弄清楚系统的首选语言,我把它放在系统首选项的顶部.我希望Locale.preferredLanguagesLocale.current将会工作,不幸的是它似乎只返回应用程序包中也支持的那些语言.

在此输入图像描述

macos cocoa nsdateformatter nslocale swift

2
推荐指数
1
解决办法
1061
查看次数

使用 SwiftUI 原生 PhotosPicker 获取 PHAsset 或有关图像的任何元数据

我可以使用 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?也许用哈希?

macos ios swift swiftui

2
推荐指数
1
解决办法
1763
查看次数

更新NSMenu中的项目时的内存管理

我想知道这是否是在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中分析我的代码,它会说存在潜在的内存泄漏.

cocoa memory-leaks memory-management objective-c nsmenu

1
推荐指数
1
解决办法
670
查看次数