小编Dav*_*rns的帖子

性能测试:sem_t vs dispatch_semaphore_t和pthread_once_t vs dispatch_once_t

我想知道使用POSIX调用pthread_once()和/ sem_wait()或dispatch_*函数会更好/更快,所以我创建了一个小测试并对结果感到惊讶(问题和结果在最后).

在测试代​​码中,我使用mach_absolute_time()来为调用计时.我真的不在乎这与纳秒没有完全匹配; 我正在将这些值相互比较,因此确切的时间单位无关紧要,只有间隔之间的差异.结果部分中的数字是可重复的而不是平均数; 我可以平均时间,但我不是在寻找确切的数字.

test.m(简单的控制台应用程序;易于编译):

#import <Foundation/Foundation.h>
#import <dispatch/dispatch.h>
#include <semaphore.h>
#include <pthread.h>
#include <time.h>
#include <mach/mach_time.h>  

// *sigh* OSX does not have pthread_barrier (you can ignore the pthread_barrier 
// code, the interesting stuff is lower)
typedef int pthread_barrierattr_t;
typedef struct
{
    pthread_mutex_t mutex;
    pthread_cond_t cond;
    int count;
    int tripCount;
} pthread_barrier_t;


int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
{
    if(count == 0)
    {
        errno = EINVAL;
        return -1;
    }
    if(pthread_mutex_init(&barrier->mutex, 0) < 0) …
Run Code Online (Sandbox Code Playgroud)

multithreading semaphore objective-c grand-central-dispatch

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

SQLite创建预先填充的FTS表

有没有办法在SQLite中创建一个预先填充SELECT查询数据的FTS表?

我知道可以创建一个预先填充SELECT数据的常规表: CREATE TABLE foo AS SELECT ref_id, name FROM other_table

我们可以像这样创建一个FTS表: CREATE VIRTUAL TABLE bar USING FTS3(ref_id, name)

这样做的目的是更新我的应用程序的SQLite数据库架构,同时避免读取所有数据other_table.我真的希望有一些方法让SQLite在这里做所有繁重的工作(这是它真正擅长的!).

sql sqlite database-schema

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

Slo-Mo视频的速度斜坡元数据

在照片和相机应用中,观看慢动作视频允许用户设置影响视频播放速率的斜坡时间.

当通过UIImagePickerController将视频导入我的应用程序时,这些斜坡似乎包含在我得到的资产中.但是,我正在编写一个自定义图像选取器控制器,并且斜坡不再自动包含在资产中.我想我必须将这个资产包装在一个AVMutableComposition中然后自己添加速度斜坡,但我似乎无法在任何地方找到斜坡元数据.

是否可以随处访问速度渐变的元数据?

cocoa-touch avfoundation ios

6
推荐指数
0
解决办法
117
查看次数

什么是Swift相当于声明`typedef SomeClass <SomeProtocol> MyType`?

我目前正在一个主要是Objective-C的项目中编写一些Swift代码.在我们的ObjC代码中,我们有一个声明的标头typedef GPUImageOutput<GPUImageInput> MyFilter;.然后我们可以声明一个只能是GPUImageOutput实现的子类的@property GPUImageInput.

(注:GPUImageOutputGPUImageInput是不是我定义的;它们是部分GPUImage库)

我们的Swift代码似乎没有认识到这一点,即使标题在我们的桥接标题中是#imported.我试图在Swift中复制声明,但这些都不是正确的语法:
typealias MyFilter = GPUImageOutput, GPUImageInput
typealias MyFilter = GPUImageOutput : GPUImageInput

objective-c ios gpuimage swift

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

类似于Equatable的Swift协议

我正在尝试为Lerp-able(线性插值)类型创建一个协议.我声明它与Equatable定义方式类似:

protocol Lerpable {
    func lerp(from: Self, to: Self, alpha: Double) -> Self
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我试图实现LerpableDouble:

func lerp(from: Double, to: Double, alpha: Double) -> Double {
    return from + alpha * (to - from)
}
extension Double: Lerpable {}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:Type 'Double' does not conform to protocol 'Lerpable'.

我认为这将非常简单,但也许我只是不明白Equatable的工作原理.或者它是Swift中的特例?有什么想法吗?


更新:正确答案如下,这是代码的最终版本,供其他人参考:

protocol Lerpable {
    func lerp(to: Self, alpha: Double) -> Self
}

extension Double: Lerpable {
    func lerp(to: Double, alpha: Double) -> …
Run Code Online (Sandbox Code Playgroud)

cocoa swift swift-protocols

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