1.

在 Cocoa Touch 框架中,类簇是抽象工厂模式在 iOS 下的一种实现,以 NSArray 举例,将原有的 alloc+init 拆开写:

id obj1 = [NSArray alloc]; // __NSPlacehodlerArray *
id obj2 = [NSMutableArray alloc]; // __NSPlacehodlerArray *
id obj3 = [obj1 init]; // __NSArrayI *
id obj4 = [obj2 init]; // __NSArrayM *

发现 + alloc 后并非生成了我们期望的类实例,而是一个NSPlacehodlerArray 的中间对象,后面的 – init 或 – initWithXXXXX 消息都是发送给这个中间对象,再由它做工厂,生成真的对象。这里的 NSArrayI 和 __NSArrayM 分别对应 Immutable 和 Mutable(后面的 I 和 M 的意思)

于是顺着思路猜实现,__NSPlacehodlerArray 必定用某种方式存储了它是由谁 alloc 出来的这个信息,才能在 init 的时候知道要创建的是可变数组还是不可变数组。

抽象工厂将一系列的产品族统一到一起创建,增加产品族很方便,但增加产品很麻烦,需要改动太多的类的接口。 ####生成器(Builder) 将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。 生成器可以将构建对象的过程分为,客户 – 指导者 – 生成器 的关系,

CharacterBuilder *characterBuilder = [[StandarCharacterBuilder alloc] init];
ChasingGame *game = [[ChasingGame alloc] init]; Character *player = [chasingGame createPlayer:characterBuilder];
Character *enemy = [chasingGame createEnemy:characterBuilder];

characterBuilder 就是生成器了,而 game 就是指导者。指导者里声明了创建不同表现的对象的方法。而方法里由生成器 characterBuilder 来构建不同的 Character 类型的对象。

  • 生成器模式将复杂的生成对象的过程交给了生成器去完成,作为客户的我们只需要根据简单的接口去生成不同表现的对象。如上述代码中的 player 以及 enemy。玩家和敌人具体的属性数值我们不需要去设置,而是交给生成器去设置。

https://github.com/al1020119/iCocosDesignPattern

http://ios.jobbole.com/85360/

https://draveness.me/2017-summary

2.git pod私有库

索引库

508  cd ~/.cocoapods/repos/

509  ls

510  history

511  ls

512  pod repo add MyRepo https://gitee.com/lianhuaren/MyRepo.git

代码库

502  cd Desktop/mycode/

503  ls

504  mkdir QinzTool

505  cd QinzTool/

506  pod lib create QinzTool

507  pwd

508  ls

上传模板文件

509  cd QinzTool/

510  ls

511  git remote add origin https://gitee.com/lianhuaren/Tool.git

512  git push -u origin master

513  git pull

514  git push -u origin master

515  git pull

516  git branch --set-upstream-to=origin/master master

518  git pull

519  git pull

521  git pull origin master --allow-unrelated-histories

522  git push -u origin master

523  git push -u origin master -f

524  history

将组件的代码上传

526  git add .

527  git commit -m "first"

528  git push -u origin master

529  pwd

530  pod lib lint --private

531  git tag 0.1.0

532  git push --tags

533  pod repo push MyRepo QinzTool.podspec

source 'https://github.com/CocoaPods/Specs.git'
source 'https://gitee.com/lianhuaren/MyRepo' platform :ios, '8.0' target 'pods01' do
use_frameworks! pod 'QinzTool', '~> 0.1.0'
pod 'AFNetworking' #公有库 end

https://blog.csdn.net/m0_37402140/article/details/72801372

https://blog.csdn.net/shiren1118/article/details/7761203

https://www.jianshu.com/p/c1a215b9ddbe

more:

1)

没用sourcetree,不会git remote add, 导致失败

也并不是在~/.cocoapods/repos/HCocaPodsSpecsManager调用pod lib create HStarTools

如果在~/.cocoapods/repos/HCocaPodsSpecsManager调用命令,这样HCocaPodsSpecsManager有.git,HStarTools又有.git

最后导致调用pod repo push HCocaPodsSpecsManager HStarTools.podspec出错。

The repo `HCocaPodsSpecsManager` at `..` is not clean

https://www.jianshu.com/p/67a1d8385c80

2)

如果不用pod lib create QinzTool,开始出现问题。

- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.

https://www.jianshu.com/p/0c640821b36f

3)

下面我们把 pod push 到远端:

git push --set-upstream origin master

下一步,我们创建一个私有的 Spec 仓库,这里面存放的是我们需要的 Pod 的索引,我在 Coding 上创建了一个 MySpec 仓库,我们先把它加到 CocoaPods 当中:

pod repo add MySpec git@git.coding.net:skyline75489/MySpec.git

这里面现在还是空的,下面我们把 XXBaseHeaders push 到仓库中,相当于发布出去:

pod repo push MySpec XXBaseHeaders.podspec --allow-warnings

https://skyline75489.github.io/post/2016-3-19_ios_modularization_practice.html

3.

sudo gem install cocoapods

https://gems.ruby-china.com/

https://blog.csdn.net/potato512/article/details/62235282



第20月第29天 cocoa抽象工厂 cocoapods组件化 cocoapods升级的更多相关文章

  1. 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)

    本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...

  2. .NET设计模式(3):抽象工厂模式(Abstract Factory)

    ):抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory) --探索设计模式系列之三 Terrylee,2005年12月12日 转载:http://terr ...

  3. C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)

    一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创 ...

  4. C#抽象工厂简单实现类

    曾经参与开发过的的项目,一般都是采用MVC模式进行开发,大概框架图如下: web界面层调用BLL业务层,BLL通过抽象工厂DALFactory动态生成继承了IDAL的数据库操作层实例,以进行对数据库的 ...

  5. 第3章 抽象工厂模式(Abstract Factory)

    原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换. 看下面的代码: 1 2 ...

  6. 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式

    桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...

  7. .Net简单工厂模式,工厂模式,抽象工厂模式实例

    1.定义   简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂模式:定义一个用于创建对象的接口, ...

  8. Java设计模式之工厂方法模式(转) 实现是抽象工厂?

    Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站   文本Tag: 设计模式 Java [IT168 技术文章]         ...

  9. Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]

     1  2 {<HeadFirst设计模式>工厂模式之抽象工厂 }  3 { 抽象工厂的产品                       }  4 { 编译工具:Delphi7.0     ...

随机推荐

  1. 【洛谷P2142 高精度减法】

    题目描述 高精度减法 输入输出格式 输入格式: 两个整数a,b(第二个可能比第一个大) 输出格式: 结果(是负数要输出负号) 输入输出样例 输入样例#1: 复制 2 1 输出样例#1: 复制 1 说明 ...

  2. ImageMagick: DrawImage(Image*,DrawInfo*) 绘制填充图片时卡住的原因分析

    今天傍晚在测试的时候无意发现有两个动画会卡住,正常情况下,20秒就完成的操作,突然卡住. CPU:95%+,经过30 - 50秒左右后,程序又能正常的向下执行,结果是对的. 这种情况不是每次都发生,有 ...

  3. Linux:不同文件相同列字符合并文件(awk函数)

    存在file1.txt,其内容如下: H aa 0 0 1 -9 H bb 0 0 2 -9 H cc 0 0 2 -9 存在file2.txt,其内容如下: H aa 0 0 0 -9 asd qw ...

  4. CodeForces - 18A Triangle(数学?)

    传送门 题意: 给出三个点的坐标,初始,这三个点可以构成一个三角形. 如果初始坐标可以构成直角三角形,输出"RIGNT". 如果某个点的 x或y 坐标移动一个单位后可以组成直角三角 ...

  5. 点赞功能与redis的相遇

    https://www.jianshu.com/p/2ab76d5bde71 或者 https://kikoroc.com/2016/06/07/dev-like-function-with-redi ...

  6. 微信小程序中出现:脚本错误或者未正确调用 Page()

    错误: ​ 解决方法: //在页面当中的.js文件里面加上 Page({ })即可

  7. BZOJ2815 拓扑排序 + LCA

    https://www.lydsy.com/JudgeOnline/problem.php?id=2815 作为一个DAG图,结点之间又有这么明显的等级之分,很容易想到的是拓扑排序. 但是不管是正向的 ...

  8. 2017-12-15python全栈9期第二天第七节之布尔值转数字

    #!/user/bin/python# -*- coding:utf-8 -*-print(int(True))print(int(False))

  9. Hbase学习04

    3.2.4 反向时间戳 反向扫描API HBASE-4811(https://issues.apache.org/jira/browse/HBASE-4811)实现了一个API来扫描一个表或范围内的一 ...

  10. scrapy框架使用教程

    scrapy框架真的是很强大.非常值得学习一下.本身py就追求简洁,所以本身代码量很少却能写出很强大的功能.对比java来说.不过py的语法有些操蛋,比如没有智能提示.动态语言的通病.我也刚学习不到1 ...