小编chu*_*guy的帖子

你如何在swift中覆盖layerClass

在Objective-C中,我们使用这样做

+ (Class)layerClass
{
    return [CAEAGLLayer class];
}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用:

CAEAGLLayer.class()
Run Code Online (Sandbox Code Playgroud)

因为class是Swift中的关键字.你是如何在Swift中做到的?

swift

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

Swift:覆盖didSet导致递归

覆盖属性的didSet观察者会导致递归,为什么?

class TwiceInt {
    var value:Int  = 0 {
        didSet {
            value *= 2
        }
    }
}

class QuadInt : TwiceInt {
    override var value:Int {
        didSet {
            value *= 4
        }
    }
}

let t = TwiceInt()
t.value = 5 // this works fine


let q = QuadInt()
q.value = 5 // this ends up in recursion
Run Code Online (Sandbox Code Playgroud)

如果我更新QuadInt

class QuadInt : TwiceInt {
    override var value:Int {
        didSet {
            super.value *= 4
        }
    }
}

q.value = …
Run Code Online (Sandbox Code Playgroud)

recursion swift swift-playground didset

13
推荐指数
2
解决办法
6218
查看次数

unique_ptr没有使用默认删除器获取init

当我创建一个unique_ptrwith时deleter,它可以工作:

std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr(new Animal<Cat>, [](Animal<Cat> *ls) {
    delete ls;
});
Run Code Online (Sandbox Code Playgroud)

但是,这段代码抛出错误:

std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr;
ptr = std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)>(new Animal<Cat>, [](Animal<Cat> *ls) {
    delete ls;
});
Run Code Online (Sandbox Code Playgroud)

错误:

/usr/bin/../lib/c++/v1/memory:2561:13: error: static_assert failed "unique_ptr constructed with null function pointer deleter"
                static_assert(!is_pointer<deleter_type>::value,
                ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
note: in instantiation of member function 'std::__1::unique_ptr<Animal<Cat>, void (*)(Animal<Cat> *)>::unique_ptr' requested here
            std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr;
                                                                ^
Run Code Online (Sandbox Code Playgroud)

这是我的编译器版本:

Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

动物和猫类是微不足道的.这是整个代码.

c++ smart-pointers c++11

6
推荐指数
2
解决办法
4575
查看次数

如果UIApplicationMain()永远不会返回,那么自动释放池何时被释放?

代码:

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}
Run Code Online (Sandbox Code Playgroud)

Apple的文档明确指出:

返回值:即使指定了整数返回类型,此函数也不会返回.当用户通过按Home键终止iPhone应用程序时,应用程序会立即通过调用退出系统函数退出,参数为零.

其次, int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName ); 我们如何从UIApplication子类访问argv?

iphone cocoa

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