小知识点总结(二)

作者: 上帝也是码农 | 来源:发表于2016-08-21 20:00 被阅读35次

    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<Void>) {
            print(kvoLabel.textStr)
            kvoLabel.text = kvoLabel.textStr
        }
    

    3)移除observe

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

    相关文章

      网友评论

        本文标题:小知识点总结(二)

        本文链接:https://www.haomeiwen.com/subject/ecdwsttx.html