第20月第29天 cocoa抽象工厂 cocoapods组件化 cocoapods升级
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——StaticFactory(静态工厂),AbstractFactory(抽象工厂)
本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...
- .NET设计模式(3):抽象工厂模式(Abstract Factory)
):抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory) --探索设计模式系列之三 Terrylee,2005年12月12日 转载:http://terr ...
- C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)
一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创 ...
- C#抽象工厂简单实现类
曾经参与开发过的的项目,一般都是采用MVC模式进行开发,大概框架图如下: web界面层调用BLL业务层,BLL通过抽象工厂DALFactory动态生成继承了IDAL的数据库操作层实例,以进行对数据库的 ...
- 第3章 抽象工厂模式(Abstract Factory)
原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库 SqlServer 跟Oracle数据库 并且不同的环境要进行随时切换. 看下面的代码: 1 2 ...
- 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式
桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...
- .Net简单工厂模式,工厂模式,抽象工厂模式实例
1.定义 简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂模式:定义一个用于创建对象的接口, ...
- Java设计模式之工厂方法模式(转) 实现是抽象工厂?
Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织 2009-02-25 来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章] ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]
1 2 {<HeadFirst设计模式>工厂模式之抽象工厂 } 3 { 抽象工厂的产品 } 4 { 编译工具:Delphi7.0 ...
随机推荐
- 【洛谷P2568】GCD
题目大意:给定整数 \(N\),求\(1\le x,y\le N\) 且 \(gcd(x,y)\) 为素数的数对 \((x,y)\) 有多少对. 题解: \[ \sum_{p \in \text { ...
- 【洛谷P3810】陌上花开
题目大意:给定一个三维空间点的坐标,求对于任意一个点三维均小于等于这个点的点个数. 题解:学会了简单的 cdq 分治. 首先,先将第一维从小到大排序,再用类似归并排序的操作对第二维进行排序,在第二维合 ...
- 使用selenium 模拟人操作请求网页
首先要 pip install selenium 安装插件 然后要下载驱动驱动根据你的浏览器 Chrome selenium 驱动下载地址 http://chromedriver.storage. ...
- 向redis中添加删除list列表
转: 向redis中添加删除list列表 2018年04月18日 15:44:54 luo_yu_1106 阅读数:4082 一.添加 向redis中添加队列有两种方式 1.lpush l是lef ...
- AndroidS软件代码提示
在用Eclipse时候,你可以进行设置,设置成不管你输入任何字母,都能进行代码的提示,在Android Studio中也可以 设置,而且比Eclipse设置来的简单.当然如果你觉得代码自动提示会降低你 ...
- Unity 物体移动的理解
Unity通过内置的Input类获取外部输入,具体查看: Editor---Project Setting---Input,常见的输入比如:Vertical.Horizontal.Fire1.Jump ...
- 快速入门Splay
\(splay\) :伸展树(\(Splay Tree\)),也叫分裂树,是一种二叉排序树,它能在\(O(log n)\)内完成插入.查找和删除操作.它由\(Daniel Sleator\)和\(Ro ...
- (map)水果 hdu1263
水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- Linux记录-linux系统常用监控指标
1.Linux运维基础采集项 做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑.所以,依靠强大的监控系统,收集尽可能多的指标,意义重大.但哪些指标才是有意义的呢,本着从实践中来的思想,各位工程 ...
- C#设计模式(10)——桥接模式
1.桥接模式介绍 桥接模式用于将抽象化和实现化解耦,使得两者可以独立变化.在面向对象中用通俗的话说明:一个类可以通过多角度来分类,每一种分类都可能变化,那么就把多角度分离出来让各个角度都能独立变化,降 ...