iOS 设计模式

单例模式

objc单例标准写法

  • (instancetype)sharedManager
    {
    static PhotoManager *sharedPhotoManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    sharedPhotoManager = [[PhotoManager alloc] init];
    sharedPhotoManager->_photosArray = [NSMutableArray array];
    });
    return sharedPhotoManager;
    }

swift单例标准写法


class MyManager  {
    static private let sharedInstance = MyManager()
    class var sharedManager : MyManager {
        return sharedInstance
    }
}

工厂方法

//正确
 +(instancetype)factoryA{
   return [[[self class]alloc]init];
}

//错误
+(id)factoryB{
   return [[XXXXClass alloc]init];
}

错误原因:

  • 主要在与返回值instancetype是安全类型,能更准确推断类型
  • [[XXXXClass alloc]init] 在子类使用时不能返回正确的子类类型,所以需要使用 [[[self class]alloc]init];

你可能感兴趣的:(iOS 设计模式)