小编Hen*_*mak的帖子

UIViewController状态恢复 - 弱关系

在iOS 6中,Apple将状态恢复添加到UIViewController相关类中.这允许应用程序在终止时保存状态,并在用户恢复应用程序时将其恢复.

一切似乎都很好,但是我已经达到了一个不想融入模式的奇怪场景.

假设我们有两个视图控制器,ViewControllerOne并且ViewControllerTwo它们都存储了一些成功恢复的任意状态.现在让我们假设ViewControllerOne有一个delegate属性,那ViewControllerTwo就是委托(这是模态视图控制器的常见模式).谁负责恢复这种关系?它应该如何存储/恢复?

在我的特定情况下,不涉及故事板,恢复发生在代码中,通过 restorationClass属性.我的第一直觉是尝试恢复关系,同时在restorationClass中创建视图控制器,但由于restorationClass不知道其他现有的控制器,它无法完全恢复这种关系.

或者,如果是视图控制器声明delegate属性,那应该是恢复关系,那么现在如何在其他类中恢复的控制器实例呢?

简而言之,这似乎是一个记录不完整的情景,我希望有人能够对此有所了解.

objective-c uiviewcontroller ios state-restoration

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

核心图形缓存

当使用图像将图像加载到应用程序中时[UIImage imageNamed: fileName],系统会缓存图像,因此在再次使用相同图像时可以提高性能.

使用Core Graphics创建的图像有类似的东西吗?我是指使用该UIImage *image = UIGraphicsGetImageFromCurrentImageContext();方法从上下文创建的图像.

我目前的方法是绘制图像并将UIImage保存到磁盘,以便下次我需要使用相同的绘图方法时,我只需从磁盘加载缓存的图像.我正在寻找一种更好的方法来存储Core Graphics生成的图像,因为当前的方法看起来很麻烦.

甚至可能将CGContextRef与所有绘图存储在一些缓存数据结构中,我不太确定这是否可能?

我的目标是仅使用Core Graphics,因此我的应用程序包更小,并且我获得了分辨率独立性,但我想提高性能,因为复杂的绘图例程可能需要花费大量时间来处理.

更新:在做了一些性能测试后,这里是我的结果.每次平均超过100次运行,一次绘制19或25个不同的视图.视图包括,矩形,圆圈,还有文本作为UILabels.使用填充,笔画,渐变和阴影.

缓存是在答案中讨论的,实现了存储UIImage对象的NSDictionary.每次运行都有一个单独的缓存,在运行中使用,但不是所有的视图(25个中有2组8,2组中的6个,它们是相同的,可以缓存).

以下是时代: iOS模拟器

19次观看

没有缓存 - 平均运行11.667ms

缓存 - 平均运行10.321ms

25次观看

没有缓存 - 平均运行14.304ms

缓存 - 平均运行13.509ms

设备

19次观看

没有缓存 - 平均82.785ms缓存 - 平均77.831ms

25次观看

没有缓存 - 平均107.977ms缓存 - 平均100.094ms

时间之间存在显着差异(几乎8%),当第一次考虑更长时间(保存到缓存)时,使用缓存仍然是有益的.

core-graphics ios

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

在 Swift 中使用 SecKeychainCreate

我正在编写一个应该维护自定义钥匙串的 OS X 应用程序,我正在尝试使用安全框架的 API 来创建钥匙串,但是,我似乎无法让它在 Swift 下编译。

这是我所拥有的,假设它path包含一个可能存在的钥匙串的路径:

let pathName = (path as NSString).UTF8String
var keychain: Unmanaged<SecKeychain>?

var status = withUnsafeMutablePointer(&keychain) { pointer in
    SecKeychainOpen(pathName, pointer)
}

if status != errSecSuccess {
    status = withUnsafeMutablePointer(&keychain) { pointer in
        SecKeychainCreate(pathName, UInt32(0), nil, false, nil, pointer)
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨 SecKeychainCreate 调用中的类型,但是,我不明白我做错了什么。

Cannot invoke 'withUnsafeMutablePointer' with an argument list of type '(inout Unmanaged<SecKeychain>?, (_) -> _)'
Run Code Online (Sandbox Code Playgroud)

如果我稍微修改第二个闭包,我会收到这个编译器错误:

Cannot invoke 'SecKeychainCreate' with an argument list of type '(UnsafePointer<Int8>, UInt32, nil, Bool, …
Run Code Online (Sandbox Code Playgroud)

security macos keychain swift

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