小编Boo*_*oon的帖子

Objective-C:主线程及其runloop中的代码如何交互?

主线程及其runloop中的代码如何交互?例如,主线程中的所有代码是否必须运行,直到它在进入runloop之前处于空闲状态?或者runloop在主线程中执行代码的过程中检查其源代码?runloop源是否有可能阻止主线程代码执行(因为它在同一个线程上运行)?

我试图理解主要线程代码如何适应在宏观方案中的runloop图片(反之亦然).

这是一个runloop与我们的代码一起的样子:

主线程:

  1. runloop以特定间隔运行
  2. runloop完成运行,我们的代码运行
  3. 我们的代码运行完毕,转到(1)(如果我们的代码运行得太久以至于runloop没有机会运行怎么办?)

multithreading objective-c nsrunloop ios

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

为什么SDImageCache在init中执行dispatch_sync?

-[SDImageCache initWithNamespace]执行dispatch_sync分配NSFileManager.dispatch_async在这里做单线的理由或好处是什么?请参阅第78行的完整代码.

        // Init the disk cache
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        _diskCachePath = [paths[0] stringByAppendingPathComponent:fullNamespace];

        dispatch_sync(_ioQueue, ^
        {
            _fileManager = NSFileManager.new;
        });
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch sdwebimage

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

无法在Xcode 5.1.1中运行单独的测试或测试用例

在Xcode 5中,通常在排水沟中每个测试方法的开头旁边都有这个复选标记,您可以将鼠标悬停并单击以运行该个案(或整个测试用例).在特定的Xcode安装上,我无法做到这一点 - 我只能通过单击Test Navigator窗格中的单个播放图标来运行整个测试套件.

不知道这是否可能是由配置问题引起的?

在此输入图像描述

tdd unit-testing xcode5

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

在Int扩展上调用mutating func

在命令行应用程序中创建了一个扩展.当我尝试调用calc方法时,它将无法工作.调用desc有效.

我错过了什么?

protocol Calculatable {
    var desc:String { get }
    mutating func calc()
}

class MyClass : Calculatable {
    var desc:String = "MyClass"
    func calc()  {
        desc += " is great"
    }
}

extension Int: Calculatable {
    var desc:String { return "hi" }
    mutating func calc() {
        self += 10
    }
}

7.desc  // works
7.calc() // Compiler error: could not find member calc
Run Code Online (Sandbox Code Playgroud)

swift swift-extensions

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

Swift"with"关键字

Swift中"with"关键字的目的是什么?到目前为止,我发现如果需要覆盖现有的全局函数(例如toDebugString),可以使用该关键字.

    // without "with" you get "Ambiguous use of 'toDebugString'" error
    func toDebugString<T>(with x: T) -> String

    {
        return ""
    }

    toDebugString("t")
Run Code Online (Sandbox Code Playgroud)

swift

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

Swift超级初始化器

在Swift中,应该在初始化当前类的所有属性之后调用super的初始化程序.然而,这不是针对Objective-C init完成的,其中在初始化当前类中的属性之前首先调用super init.

Swift试图通过强制执行此操作来阻止哪些问题?为什么Objective-C能够避免Swift试图阻止的问题?

swift

5
推荐指数
2
解决办法
386
查看次数

核心数据实体命名约定

核心数据实体的命名是否有约定?我听到的关于不给 Core Data 实体添加前缀的论点是因为它们不可能发生冲突,因为它们只需要在模型中唯一,但这是不正确的,因为生成的 NSManagedObject 子类仍然可能与现有的 Objective-C 类发生冲突。

因此,对我来说,对核心数据实体做两件事似乎是合乎逻辑的:用我的项目类前缀作为前缀,并用实体作为后缀。这样,我知道它是一个核心数据实体,并且它的名称永远不会与任何其他类冲突。

core-data ios

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

Swift中的元组和函数参数

在Swift中,元组与函数参数有什么关系?

在以下两个示例中,函数返回相同的类型,即使一个采用元组而另一个采用两个参数.从调用者的角度来看(没有窥视代码),函数是否采用元组或常规参数没有区别.

函数参数在某些方面与元组有关吗?

例如

func testFunctionUsingTuple()->(Int, String)->Void {
    func t(x:(Int, String)) {
        print("\(x.0) \(x.1)")
    }

    return t
}

func testFuncUsingArgs()->(Int, String)->Void {
    func t(x:Int, y:String) {
        print("\(x) \(y)")
    }

    return t
}

do {
    var t = testFunctionUsingTuple()
    t(1, "test")
}

do {
    var t = testFuncUsingArgs()
    t(1, "test")
}
Run Code Online (Sandbox Code Playgroud)

在常规函数(而不是返回函数)中声明函数参数中的元组时,行为也存在不一致:

func funcUsingTuple(x:(Int, String)) {
    print("\(x.0) \(x.1)")
}

func funcUsingArgs(x:Int, _ y:String) {
    print("\(x) \(y)")
}

// No longer works, need to call funcUsingTuple((1, "test")) instead
funcUsingTuple(1, "test")   
funcUsingArgs(1, "test3") …
Run Code Online (Sandbox Code Playgroud)

tuples swift

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

带闭包的惰性变量

本文中,它说(引用下面的代码):"你必须使用lazy来防止关闭被多次创建."

private lazy var variable:SomeClass = {
    let fVariable = SomeClass()
    fVariable.value = 10
    return fVariable
}()
Run Code Online (Sandbox Code Playgroud)

为什么懒惰会阻止封闭被多次创建?为什么缺乏懒惰导致它不止一次评估?

lazy-evaluation swift

5
推荐指数
2
解决办法
2537
查看次数

如何滚动故事板预览?

故事板有一个水平滚动条,您可以滚动查看其他场景,但在预览故事板场景时不会出现滚动条.如何滚动故事板预览?(假设我没有使用魔法鼠标)

xcode storyboard xcode7

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