小编hga*_*ale的帖子

以防万一,在去初始化之前发送信号量是否安全?

class SomeViewController: UIViewController {
    let semaphore = DispatchSemaphore(value: 1)

    deinit {
        semaphore.signal() // just in case?
    }

    func someLongAsyncTask() {
        semaphore.wait()
        ...
        semaphore.signal() // called much later
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我告诉信号量等待,然后在信号量被告知发出信号之前取消初始化拥有它的视图控制器,则应用程序会因错误而崩溃Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。但是,如果我只是调用视图控制器的方法,就可以避免灾难semaphore.signal()deinit但是,如果异步函数在deinit调用之前返回并且视图控制器被取消初始化,则signal()调用两次,这似乎没有问题。但这样做安全和/或明智吗?

grand-central-dispatch swift dispatchsemaphore

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

如何调试与主机的随机 DYGLInitPlatform 连接在应用程序启动时出现失败错误?

随机且看似没有任何明显模式,我在应用程序启动时收到以下错误,该错误永远不会超过启动屏幕:

2020-09-11 11:38:36.809281-0700 Pineapple[5448:1115742] [DYGLInitPlatform] connection to host has failed: Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"
2020-09-11 11:38:36.811548-0700 Pineapple[5448:1115742] aborting: platform initialization failed
Run Code Online (Sandbox Code Playgroud)

线程列表:

(lldb) thread list
Process 5448 stopped
  thread #1: tid = 0x1105df, 0x000000019e76377c libsystem_kernel.dylib`__ulock_wait + 8, queue = 'com.apple.main-thread'
* thread #2: tid = 0x11065e, 0x000000019e762d88 libsystem_kernel.dylib`__pthread_kill + 8, stop reason = signal SIGABRT
  thread #3: tid = 0x11065f, 0x000000019e763940 libsystem_kernel.dylib`__workq_kernreturn + 8
Run Code Online (Sandbox Code Playgroud)

线程回溯:

(lldb) thread backtrace
* thread #2, stop reason = signal SIGABRT …
Run Code Online (Sandbox Code Playgroud)

ios lldb

8
推荐指数
0
解决办法
594
查看次数

如何在 Swift 中从 UIImage 转换为 HEIF / HEIC 数据?

NSKeyedArchiver适当的转换UIImageData

do {
    let data = try NSKeyedArchiver.archivedData(withRootObject: UIImage(named: somePath), requiringSecureCoding: true)
    ...
} catch {
    print(error)
}
Run Code Online (Sandbox Code Playgroud)

或者是矫枉过正,使用pngData()更合适?

let image = UIImage(named: somePath)
let data = image?.pngData()
Run Code Online (Sandbox Code Playgroud)

以及如何从UIImageHEIF / HEIC转换Data

目标是将图像保存到设备的文件系统。

uiimage nsdata ios swift heic

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

如何通过将其目标设置为并发队列来创建串行 DispatchQueue?

由于每个调度队列都会消耗线程资源,因此创建额外的并发调度队列会加剧线程消耗问题。将任务提交到全局并发调度队列之一,而不是创建专用并发队列。对于串行任务,请将串行队列的目标设置为全局并发队列之一。这样,您可以维护队列的序列化行为,同时最大限度地减少创建线程的单独队列的数量。

https://developer.apple.com/documentation/dispatch/dispatchqueue

当文档说DispatchQueue通过将队列的目标设置为全局并发队列来创建串行时,这是他们的意思吗?

let q = DispatchQueue(label: "someSerialQueue", qos: .default, attributes: [], autoreleaseFrequency: .inherit, target: .global())
Run Code Online (Sandbox Code Playgroud)

另外,这真的比简单地标记它更可取吗:

let q = DispatchQueue(label: "someSerialQueue")
Run Code Online (Sandbox Code Playgroud)

swift

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

如何操作 AWS AppSync 和 GraphQL 以符合 DynamoDB 最佳实践?

DynamoDB 在每个应用程序一个表的情况下运行效果最佳 ( https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html ),但 AppSync 默认情况下打破了该规则从 GraphQL 模式自动生成代码(AWS 建议用户允许 API 执行此操作)。因此,要在坚持 DynamoDB 最佳实践的同时将 AppSync 与 GraphQL 结合使用(假设 DynamoDB 是 GraphQL API 的唯一数据源),这种方法是否有效?

首先,创建一个空白 DynamoDB 表(TheTable在此示例中)并为其指定分区键 ( partitionKey) 和排序键 ( sortKey)。

其次,手动强制每个 GraphQL 类型都由该表支持 ( TheTable)。这就是 AppSync 自动代码生成将走向另一个方向的地方。

GraphQL 架构:

type Pineapple {
    partitionKey: String!
    sortKey: String!
    name: String!
}

# create varying types as long as they all map to the same table
type MachineGun {
    partitionKey: String!
    sortKey: String!
    name: String!
}

input …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb graphql aws-appsync aws-amplify

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

通过 FCM 发送推送通知时何时使用 iOS 设备令牌?

我对通过 FCM 实现云消息传递感到困惑。要向 iOS 设备发送远程(推送)通知,APN 需要 iOS 设备令牌。但是,Firebase 应用程序不与 APN 交互,而是与 FCM 交互,FCM 与 APN 交互。但要通过 FCM 向任何客户端发送推送通知(或消息)需要 FCM 令牌。这是否意味着 Firebase 应用不需要 iOS 设备令牌即可向 iOS 设备发送推送通知?

apple-push-notifications firebase firebase-cloud-messaging

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

为什么在类中需要声明 self 的结构中不需要声明 self ?

为什么self在类中需要声明的结构中不需要声明?我不知道是否还有其他例子说明了这种情况,但在转义闭包的情况下,确实如此。如果闭包是非可选的(因此是非转义的),则不需要self在两者中的任何一个中声明。

class SomeClass {
    let someProperty = 1
    
    func someMethod(completion: (() -> Void)?) {}
    
    func anotherMethod() {
        someMethod {
            print(self.someProperty) // declaring self is required
        }
    }
}

struct SomeStruct {
    let someProperty = 1
    
    func someMethod(completion: (() -> Void)?) {}
    
    func anotherMethod() {
        someMethod {
            print(someProperty) // declaring self is not required
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swift

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

如何将KVO通知与线程安全结合起来?

如何将 KVO 通知与线程安全结合起来?我有一个类需要符合 KVO 标准,这就是我目前的做法:

class CustomOperation: Operation {
    private let stateQueue = DispatchQueue(label: "customOperation", attributes: .concurrent)
    private var _isExecuting = false
    
    override var isExecuting: Bool {
        get {
            return stateQueue.sync { _isExecuting }
        }
        set {
            stateQueue.async(flags: .barrier) {
                self._isExecuting = newValue
            }
        }
    }
    
    override func start() {
        willChangeValue(forKey: "isExecuting")
        isExecuting = true
        didChangeValue(forKey: "isExecuting")
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样在属性设置器内移动通知吗?

class CustomOperation: Operation {
    private let stateQueue = DispatchQueue(label: "customOperation", attributes: .concurrent)
    private var _isExecuting = false
    
    override var isExecuting: …
Run Code Online (Sandbox Code Playgroud)

ios swift

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

WordPress:如何使用$ wp_query按类别过滤帖子?

我在WordPress上使用静态首页构建了一个自定义主题,并且在"设置">"阅读设置">"首页"中没有设置页面显示为帖子页面.我想根据不同静态页面上整个网站的类别来显示帖子.因此,我永远不会通过控制台声明帖子索引页面.所以我使用$ wp_query函数.

如何在此脚本中添加过滤器,仅显示"apples"类别中的帖子(例如)?现在,此脚本显示所有帖子,无论类别如何.

<?php
    $temp = $wp_query;
    $wp_query = null;
    $wp_query = new WP_Query();
    $wp_query->query('showposts=1' . '&paged='.$paged);
    while ($wp_query->have_posts()) : $wp_query->the_post();
?>

<h2><a href="<?php the_permalink(); ?>" title="Read"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php the_date(); ?>

<?php endwhile; ?>

<?php if ($paged > 1) { ?>
    <p><?php previous_posts_link('Previous page'); ?>
    <?php next_posts_link('Next page'); ?></p>
<?php } else { ?>
    <p><?php next_posts_link('Next page'); ?></p>
<?php } ?>

<?php wp_reset_postdata(); ?>
Run Code Online (Sandbox Code Playgroud)

php wordpress custom-post-type posts

3
推荐指数
2
解决办法
2万
查看次数

程序化UI:不要调用super.loadView但是调用super.viewDidLoad?

此问题适用于不使用nib文件的仅编程应用程序,其中已删除故事板并创建窗口并在应用程序委托中提供根视图.我在这里读到的一些可接受的答案似乎与Apple的文档有冲突,所以请告诉我这是否正确:

在创建a时UIViewController,应该放置创建其基础的方法loadView 而不调用super.loadView:

override func loadView() {

    // build something
    buildSomething()

}
Run Code Online (Sandbox Code Playgroud)

这使最后的润色的方法应该放在viewDidLoad 调用super.viewDidLoad:

// view did load
override func viewDidLoad() {
    super.viewDidLoad()

    // arrange something that requires it be built first
    arrangeSomething()

}
Run Code Online (Sandbox Code Playgroud)

或者super.viewDidLoad()只应在特殊情况下调用?如果是这样,他们是什么?

uiviewcontroller ios

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