1.html
在 Cocoa Touch 框架中,類簇是抽象工廠模式在 iOS 下的一種實現,以 NSArray 舉例,將原有的 alloc+init 拆開寫:ios
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 的意思)git
因而順着思路猜實現,__NSPlacehodlerArray 一定用某種方式存儲了它是由誰 alloc 出來的這個信息,才能在 init 的時候知道要建立的是可變數組仍是不可變數組。github
抽象工廠將一系列的產品族統一到一塊兒建立,增長產品族很方便,但增長產品很麻煩,須要改動太多的類的接口。 ####生成器(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 類型的對象。ruby
https://github.com/al1020119/iCocosDesignPattern框架
http://ios.jobbole.com/85360/post
https://draveness.me/2017-summaryui
2.git pod私有庫spa
索引庫
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