小编zou*_*oul的帖子

如何等待异步调度块完成?

我正在测试一些使用Grand Central Dispatch进行异步处理的代码.测试代码如下所示:

[object runSomeLongOperationAndDo:^{
    STAssert…
}];
Run Code Online (Sandbox Code Playgroud)

测试必须等待操作完成.我目前的解决方案如下:

__block BOOL finished = NO;
[object runSomeLongOperationAndDo:^{
    STAssert…
    finished = YES;
}];
while (!finished);
Run Code Online (Sandbox Code Playgroud)

看起来有点粗糙,你知道更好的方法吗?我可以通过调用暴露队列然后阻塞dispatch_sync:

[object runSomeLongOperationAndDo:^{
    STAssert…
}];
dispatch_sync(object.queue, ^{});
Run Code Online (Sandbox Code Playgroud)

......但是这可能会暴露太多object.

unit-testing objective-c grand-central-dispatch

177
推荐指数
6
解决办法
11万
查看次数

如何用格式创建一个字符串?

我需要创建一个格式的字符串,可以将int,long,double等类型转换为字符串.使用Obj-C,我可以通过以下方式完成.

NSString *str = [NSString stringWithFormat:@"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE];
Run Code Online (Sandbox Code Playgroud)

如何用swift做同样的事情?

ios swift ios8

175
推荐指数
7
解决办法
22万
查看次数

我可以在减速机中发送动作吗?

是否可以在减速机本身发送动作?我有一个进度条和一个音频元素.目标是在音频元素中更新时间时更新进度条.但是我不知道将ontimeupdate事件处理程序放在何处,或者如何在ontimeupdate的回调中调度一个动作来更新进度条.这是我的代码:

//reducer

const initialState = {
    audioElement: new AudioElement('test.mp3'),
    progress: 0.0
}

initialState.audioElement.audio.ontimeupdate = () => {
    console.log('progress', initialState.audioElement.currentTime/initialState.audioElement.duration);
    //how to dispatch 'SET_PROGRESS_VALUE' now?
};


const audio = (state=initialState, action) => {
    switch(action.type){
        case 'SET_PROGRESS_VALUE':
            return Object.assign({}, state, {progress: action.progress});
        default: return state;
    }

}

export default audio;
Run Code Online (Sandbox Code Playgroud)

reducers reactjs redux

171
推荐指数
4
解决办法
9万
查看次数

是否有Subversion命令重置工作副本?

是否有一个Subversion命令可以将工作副本"重置"到存储在存储库中的状态?类似的东西git reset --hard或(ha,硬Git重置也不会删除未版本控制的文件!)rm -rf wc && svn co <url> wc.

更新:我不是在简单的还原之后,因为它不会删除工作副本中的额外文件.我真的想要的东西与删除工作副本并再次检出它一样,只需要不必再次下载数据.(显然我不介意丢失所有未提交的更改.)

svn

105
推荐指数
5
解决办法
10万
查看次数

进行持续集成时的最佳分支策略?

当您想要进行持续集成时,最佳分支策略是什么?

  1. Release Branching:在trunk上开发,为每个版本保留一个分支.
  2. 特征分支:在单独的分支中开发每个特征,仅合并一次稳定.

将这两种策略结合使用是否有意义?在,你为每个版本分支,但你也分支大型功能?这些策略中的一个是否与持续集成更好地结合?使用不稳定的行李箱时,使用持续集成是否有意义?

svn version-control continuous-integration branch

99
推荐指数
5
解决办法
6万
查看次数

如何使用Swift的Codable编码成字典?

我有一个实现Swift 4的结构Codable.是否有一种简单的内置方法将该结构编码为字典?

let struct = Foo(a: 1, b: 2)
let dict = something(struct)
// now dict is ["a": 1, "b": 2]
Run Code Online (Sandbox Code Playgroud)

swift swift4 codable

93
推荐指数
8
解决办法
5万
查看次数

使用Objective-C中的类别覆盖方法

我可以使用类类别来覆盖已使用类别实现的方法吗?像这样:

1)原始方法

-(BOOL) method {
  return true;
}
Run Code Online (Sandbox Code Playgroud)

2)覆盖方法

-(BOOL) method {
  NSLog(@"error?"); 
  return true; 
}
Run Code Online (Sandbox Code Playgroud)

这会起作用,还是非法的?

objective-c categories

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

为什么nil/NULL块在运行时会导致总线错误?

我开始大量使用块很快就注意到nil块会导致总线错误:

typedef void (^SimpleBlock)(void);
SimpleBlock aBlock = nil;
aBlock(); // bus error
Run Code Online (Sandbox Code Playgroud)

这似乎违反了Objective-C的通常行为,忽略了对nil对象的消息:

NSArray *foo = nil;
NSLog(@"%i", [foo count]); // runs fine
Run Code Online (Sandbox Code Playgroud)

因此,在使用块之前,我必须采用通常的零检查:

if (aBlock != nil)
    aBlock();
Run Code Online (Sandbox Code Playgroud)

或者使用虚拟块:

aBlock = ^{};
aBlock(); // runs fine
Run Code Online (Sandbox Code Playgroud)

还有其他选择吗?有没有理由为什么nil块不能简单地成为一个nop?

objective-c objective-c-blocks

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

如何在没有死锁的情况下同步调度主队列?

我需要同步在主队列上调度一个块.我不知道我目前是在主线程上运行还是不运行.天真的解决方案看起来像这样:

dispatch_sync(dispatch_get_main_queue(), block);
Run Code Online (Sandbox Code Playgroud)

但是如果我当前在主队列上运行的块中,则此调用会产生死锁.(同步调度等待块完成,但块甚至没有开始运行,因为我们正在等待当前块完成.)

显而易见的下一步是检查当前队列:

if (dispatch_get_current_queue() == dispatch_get_main_queue()) {
    block();
} else {
    dispatch_sync(dispatch_get_main_queue(), block);
}
Run Code Online (Sandbox Code Playgroud)

这有效,但很难看.在我至少将它隐藏在一些自定义功能之前,是不是有更好的解决方案来解决这个问题?我强调我不能异步调度块 - 应用程序处于异步调度块将"执行得太晚"的情况.

objective-c grand-central-dispatch ios objective-c-blocks

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

在iOS上通过原生Facebook应用打开Facebook链接

如果iPhone上安装了原生Facebook应用程序.如何从我的应用程序打开Facebook链接到本机Facebook应用程序.在Safari打开的情况下,链接与以下内容相同:

http://www.facebook.com/AlibabaUS

谢谢.

iphone xcode facebook ios

62
推荐指数
5
解决办法
15万
查看次数