小知识点总结(二)

1、单例
OC

+(OCSingleton *)shareInstance{
    
    static OCSingleton *ocSingleton = nil;
    static dispatch_once_t once_Token;
    
    dispatch_once(&once_Token, ^{
        ocSingleton = [[self alloc]init];
    });
    return ocSingleton;
}

Siwft
1)在Swift里,你可以使用一个简单的static类型的属性来仅仅初始化一次,在多条线程同时访问时它可以保证只初始化一次。

class Singleton {
    static let sharedInstance = Singleton()
}

2)如果你想在初始化的时候执行额外的代码,你可以写成下面这种形式。

class Singleton {
    static let sharedInstance: Singleton = {
        let instance = Singleton()
        // setup code
        return instance
    }()
}

调用singleton

       let singleton1 = CustomSingleton.sharedInstance
        print(singleton1)
        
        let singleton2 = CustomSingleton.sharedInstance
        print(singleton2)

2、取消按钮高亮状态
adjustsImageWhenHighlighted此属性设为NO
3、KVO
1、KVO:Key-value observing键值观察者模式,当一个对象监听的对象的某一属性被改变的时候,该对象会自动被通知。这是一种解耦合的设计模式。
2、实现KVO的三个步骤(Swift)
tip:被监听的对象必须是NSObject的子类
被监听的属性前必须加dynamic修饰
因为 KVO 是基于KVC(Key-ValueCoding)以及动态派发技术实现的,而这些东西都是Objective-C运行时的概念。另外由于Swift为了效率,默认禁用了动态派发,因此想用Swift来实现KVO,我们还需要做额外的工作,那就是将想要观测的对象标记为 dynamic(该段为转载,原地址:http://swifter.tips/kvo/)

 dynamic var textStr = "gggg"

1)给被监听的对象添加观察者

kvoLabel.addObserver(self, forKeyPath: "textStr", options: .New, context: nil)

2)重写方法: observeValueForKeyPath:ofObject:change:context:

   override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) {
        print(kvoLabel.textStr)
        kvoLabel.text = kvoLabel.textStr
    }

3)移除observe

  deinit{
        kvoLabel.removeObserver(self, forKeyPath: "textStr")
    }

你可能感兴趣的:(小知识点总结(二))