威科夫中阶课程(五)

UTAD/UT

  • Spring的反面 UPAT是Spring的反面
  • UTAD 在刺穿阻力时,有成交量的上升,就是一种很好的UTAD

越快速回来(价差宽),成交量很大,越看空
其分析其实和Spring是一样的。
只不过Spring是想下为努力失败
UTAP是想上为努力失败

1. 供给分析的元素(很重要)

  • 价差
    K线最高价和最低价之间的幅度,反映运动的难易程度和结果;宽的话结果好些。
    跳空的是前有个的收盘。

  • 成交量
    单位时间成交的买盘或卖盘数量,反映买盘或卖盘付出的力量;

  • k线摆动
    价格如何从开盘运动到收盘结束;K线的日内摆动;

  • 收盘价
    收盘价的变动,揭示了对应买盘或者卖盘所取得的成果

  • 需求
    买盘的力量

  • 供应
    卖盘的力量

  • 供求关系
    买盘力量和卖盘力量之间的关系

威科夫不对一根一根K线做分析,而是对波动作分析。每一波每一波的需求与供应。

1.1 价差分析总则(重要)

  1. 价差增加
    价格行进中,阻力较小
    例如:在收盘价较高时

    • 供应下降,需求增加
    • 供应不变,需求增加
    • 供应上升,需求上升的更多
  2. 价差减少
    价格行进中有一些阻力

  3. 平均价差
    表明正常的趋势或者正常的价格行进

1.2 成交量分析总则(重要)

  1. 一般规则
    成交量表明需求和供应的质量,但通常我们观察成交量时,更倾向于它代表着的供应的出现或者缺乏,供应是第一位的,其次才是需求

  2. 成交量的增加
    代表着支撑价格运动的力量在增加,或者供求即将改变的迹象,或者只是供应出现的迹象

  3. 高量
    通常表明供应的出现,如果价格想要继续上涨,那么就必须吸收掉这些供应。要么是CO吸收,要么被散户买走

  4. 极高量
    通常是BC

  5. 成交量极少
    支撑价格运动的力量在减少,或者供求其中一方在减少,或者只是供应减少的证据。

6.低量
支撑价格运动的力量很小,或者只有很少的供应

特别说明
成交量不代表供应,也不代表需求。代表成交的数目。成交是供应大,还是需求大,要结合K线所取得的结果。

1.3 成交量分析情况(重要)

上涨市场,价差增加

  1. 成交量增加
    价差增加,成交量增加,需求增加,健康的价格向上运动
    但如果是极高量,可能是BC

  2. 成交量极少
    价差增加,成交量较少,轻松反弹
    或者需求减少,容易下跌

  3. 平均成交量
    正常的价格向上运动
    但是成交量应该跟上价差的变化

上涨市场,价差减少

  1. 成交量增加
    价差减少,很可能有高质量的供应进入,尝试向下反转价格运动

  2. 成交量减少
    价差减少,很可能需求耗尽,容易产生回落

  3. 平均成交量
    价格运动减速,遇到一些供应,指示价差减少

下跌市场,价差增加

  1. 成交量增加
    供应增加,健康的价格向下运动
    如果是极高量,可能是SC

  2. 成交量减少
    轻松下跌 或者 有供应减少,容易引发反弹

  3. 平均成交量
    正常的价格向下运动
    但是成交量应该要跟上价差的变化

下跌市场,价差减少

  1. 成交量增加
    可能有高质量的需求进入,尝试向上反转价格运动

  2. 成交量减少
    供应耗尽,容易引发反弹

  3. 平均成交量
    价格运动减速,遇到一些需求

2019/2/24 posted in  证券市场投资逻辑

威科夫中阶课程(四)

1. 行为,反应和测试

行为:通常有高波动率,宽价差,高成交量
反应:对前面行为的反应,价差,成交量
测试:对行为的测试,成交量,低点

  • 描述动作的因素
    成交量(努力),价差(结果),位置(结果)

  • 行为理解

  • 反应理解

  • 测试理解
    测试最好是更高的地点,并且成交量是低的。如果成交量较大,并且没有下跌到更地点,那么说明供应较大且需求也较大,那么就会进入震荡区,需要进行二次测试。

  • 前后对比
    通过前后的行为比较前后反应程度比较,然后是前后测试有效度比较

  • Spring示例

    左侧 向下刺穿支撑
    右侧 Reaction: 反弹
    Test: 再次回落测试供应

2. Spring的买入点(说实话这里不是很理解)

  • NS(NO Supply)(不是好的买点)
    不好放止损。因为在支撑位置时,很可能是无供应,也无需求,价格的上涨,是需要需求的。很多情况下是阴跌。所以最好是买在需求柱的地方。交易成本较大。

  • GBD(更好的买入点)
    需求柱的收盘位置进,止损放在需求柱底部。

3. 趋势线工具

支撑:需求战胜供应的区域
阻力:供应战胜需求
趋势:
趋势通道
步幅:在上升通道里,步幅会越来越小,从而上升趋势减速
1/2回落:回落要在1/2之上

供应线与需求线
阻力线与支撑线

4. 思考路径

v,p-->s,d-->co-->direction
量价推断--》供应与需求--》推断CO目的--》市场方向
2019/2/21 posted in  证券市场投资逻辑

威科夫中阶课程(三)

1. 练习方法

practice 模拟练习
case study 案例分享

paper trade 历史纸上交易(在历史走势里一屏一屏过)
actual trade 实盘

2. 吸筹备忘录

2.1 A段与B段

  • A段和B段的意图

    • A:停止行为
    • B:测试供应,产生需求,换手,从公众手里换手到CM手里
  • 威科夫原理

    • A:PS,SC,AR,ST
    • B:UA,ST,ST as SOW
  • 初次支撑PS

    • 停止下跌的第一次尝试
    • 尝试总是失败,价格会继续走低到SC
  • SC卖盘高潮

    • 宽价差/高的成交量
    • 例外1 持续走低的SC运动,供应减少
    • 例外2 SC行为可能持续一段时间,其最低的k线未必有最高的成交量
    • SC的低点定义了TR的支撑线
  • 自动反弹AR

    • 供应的耗尽产生了从SC低点的初始反弹,随后由空头回补来继续推高价格
    • AR的高点定义了TR的阻力线
  • 二次测试ST

    • ST可以是SC和AR的一个局部事件(可以理解成AR中的一个ST,还会反弹跟高,只是一个中产休息)
    • ST可以做为一个更重要的确认
    • ST可以是一个小型的TR,整个小型TR作为一个测试行为
    • B中的一个产生更低的点的ST,可以理解为一个SOW,它指示出吸筹需要进行更多的测试,或者进行更久的盘整。(也就是这个ST也是需要被测试的)
  • 上冲回落型的行为UA

    • UA为了与派发中的UT进行区分
    • 价格短暂的离开交易区间的阻力,又快速地回到阻力之下,意味着向上的突破失败,也意味着供应的出现

2.2 C段与D段

  • C和D的意图

    • C:对TR支撑的最后测试(我们一般交易C段)
    • D:TR中的上涨,展现摆脱阻力的能力,并测试阻力已经转换成支撑
  • 威科夫原理

    • C:Spring,TSO,LPS
    • D:SOS,LPS,JOC,BU
  • Spring

    • 测试[A]与[B]的低点
    • 可能成功,也可能失败
    • 三种类型 Spring1,Spring2,Spring3
    • Spring与Spring的测试,等同于一个LPS
  • 终极震仓TSO

    • 宽价差和高成量的陡峭下跌
    • 大幅打破TR支撑
    • 快速的修复并回到TR支撑之上(必须)
    • 在交易前需要测试
  • 强势信号SOS

    • 通常情况下,价格以宽价差和增加的成交量运动到TR的高位,甚至TR的阻力之上,指示出潜在的需求的增加
    • 它可以是跳过小溪的第N次尝试,但却是最成功的一次
    • 产生HH,HL(更高的高点,更高的低点)
    • 次要的SOS可以发生在[B]中,主要SOS则发生在[D]中
  • 最后的支撑点LPS

    • 形成HL
    • 低的成交量,窄的价差,或者减少的成家量和缩窄的价差
    • 价格无法走的更低,并且之后不会在回到这个点,LPS本身可以被认为是一个强势信号
    • D中可以有多个LPS
  • 回测小溪BU

    • 上涨趋势之前,最后的较大回落
    • 价格无法回到原有阻力之下,或者只能暂时地回到原阻力之下
    • 回落幅度小于之前反弹的1/2最佳(即JOC那段的一半以上)

3. JOC

注意点

  • 展现突破阻力的能力
  • 阻力区是一个区间,并且有厚度,是TR的最高点与次高点之间的区域
  • 需要突破TR的最高点(一定要过最高点,才是完全突破了)
  • 若果不是在突破最高点,交易的胜率很低

突破有效性

  • 传统的判断方法

    • Margin 突破幅度1-3%以上(依赖于品种)
    • Close 收盘价在阻力区之上
    • Time 两根K线在阻力区上
    • Volume 最好适当放量
    • Mixed Method 混合以上方法
  • 突破可以被预测吗

    • 不要买突破的原因分析?
      如果是假突破,胜率就会降低
      如果有回测,盈亏比会降低,而且回测较大时,会头寸很容易被打掉

    • 买LPS还是买BU的比较 ?
      LPS:胜率低,盈亏较高
      BU:高胜率,盈亏比较低

4. Spring

一个潜在spring是对一个支撑水平的刺穿。即向下突破失败。

  • 为什么用"潜在"?

    • 支撑水平的重要程度不同
      意思是要有足够的cause。spring通过向下突破失败去测试水平支撑

    • 刺穿的行为
      价差,成交量

  • Spring分类

    • 1类

      不是真正的Spring,是SOW

    • 2类

      稍微较高的成交量

    • 3类

      低成交量

    • 后续变化

      2-->3,2类转到3类,就是对2类的测试,是很好的交易时机

      2-->1,2类有可能会转换成1,特别是在下跌趋势中

    • Spring的质量

    • 对支撑水平的刺穿深度(刺穿比较浅,收回比较快)

    • 向潜在spring位置运动时,和进入spring位置时的价差(价差小)

    • 向潜在spring位置运动时,和进入spring位置时的成交量(成交量小)

    1. 成交量合适标准:前期横盘区的平均成交量的1/2,前期横盘区的平均价差1/2
    2. Spring也可以是一个区域,并不完全是一个带下影的k线。
2019/2/16 posted in  证券市场投资逻辑

威科夫中阶课程(二)

派发的原理和事件

  • PSY
    在上涨一定时间后卖盘开始提供明显的阻力,价格创新高,成交量增加,价差扩大,它指出上涨运动可能接近尾声

  • BC
    价差的宽度和卖盘力量通常到达顶点的地方,在顶部附件,大型专业机构满足来自于公众的急切买盘。(通常成交量比前面更大)

  • AR
    BC到AR,与前面的回调的成交量相比较,判断是否是AR;通常成交量较大。回调幅度较大。

  • ST
    测试市场的需求是否还存在。通常看到ST后就会进入盘整时期。成交量较BC小一点

  • UT
    突破后,立马回到了TR。测试A段,看需求的能力。

  • UTAD
    它是对价格突破到阻力线之上所产生的需求的最后的测试。与吸筹中的Spring和终极震仓一样。

  • LPSY

UP与JOC的区分

有效突破:幅度,时间(在2到3根K线,收盘都在最好在原阻力之上),成交量(适当放量,不能是天量,成交量上升意味S放大,同时D也变大,回落时成交量不能很大)

波动性:通常在派发时波动性较强。因为CM在达到目标时,进入派发区,留给CM的时间比较少。

特征改变

  • Main SOS 下跌趋势到横盘 比如 SC,AR,ST
  • Main SOW 横盘到上升趋势 Spring,LPS,JOC,

如何制定基于结构的策略

交易策略制定原则:方向,目标,时机 + 衡量盈亏比

  • 定义市场背景 划出趋势线。定义时在上升趋势,还是横盘,还是下跌趋势 遇到阻力去做空,遇到支撑去做多
    • 如果做空了的人 寻找趋势改变的迹象(SC,AR,ST)去平仓。可以在SC,AR期间,ST时平仓
  • 定义A段

    SC到AR的目标位无法确定,AR的反弹都比较高。SC的位置也无法确定,有可能SC不是SC,而是继续SC。所以这个段最好不要做。
    AR到ST的目标位知道(暂时是ST的位置),SC有可能继续下跌,即ST有可能是失败的。

  • ST确定了

    • 如果持有空仓的人
      就应该平仓了
      ST确定就表示A段已经发生了,进入B段。ST就很有可能会有横盘。B段的波动性幅度都会很大,难度很大。

    • 如果此时B段后期有低点
      可以去尝试做多。因为B段走一段时间后,有可能进入C段。但此时我们无法判断是C段,C段是后期走出来然后判断出来的。如果出现SOS,基本就会是C段。

再次吸筹

  • 再次吸筹的形式
    屏幕快照 2019-02-09 04.57.44

  • 再次吸筹的分辨
    只能通过对供求分析

吸收供应的特征(趋势可能向上)

  • 尝试突破阻力的行为,所产生的反应较小(成交量小,幅度小,价差小
    比如:回落较小

  • 尝试突破阻力的反应较大时,持续性较差(无跟进,不能维持成果
    比如:有一根较大的阴线,就但后面很快没有了,又立马收回去了,被吸收了

  • 最好形成HH+HL(更高的高点,或者更高的低点

  • UA所引发的回落没有结果
    比如:它随后的走势没有出现SOW,成交量高时,是庄家需求,成交量低时,庄家没有提供供应。

  • 有时候吸收以spring结束

  • 波动性通常会降低(回落的结果会越来越差)

  • 价格与助理争锋相对

供应吞没需求的特征(趋势可能向下)

  • 尝试突破支撑的行为,所产生的反应较小

    比如:尝试向下突破支撑,但反弹回支撑之上的力度较小

  • 尝试突破支撑的反应较大时,持续性较差
    比如:有较大的反弹,但又立马火大支撑附近。并且成交量较大。

  • 最好形成LL,LH
    即,更低的低点,更低的高点

  • 潜在Spring/ST in |B|所引发的反弹没有结果

  • 有时候吞没以UTAD结束

  • 波动性通常上升(回落的结果越来越差)

  • 价格与支撑针峰相对

2019/1/28 posted in  证券市场投资逻辑

威科夫中阶课程(一)

1. 现代技术分析历史

  1. 查尔斯 道(《股市晴雨表》),汉密尔顿,雷亚
  2. 威科夫,埃文斯,汉克 普鲁顿 大卫 * 怀斯(威科夫理论的继任者)
  3. 沙巴克 爱德华 麦吉(《股市趋势技术分析》)
  4. 唐奇安 (均线)

2. 学术对技术分析的质疑

随机漫步理论

有效市场假说

A股更适合威科夫理论。因为在A股市场上散户有比较少的专业度,是非理性的。

自证预言

主观成分

无法长线分析

3. 道氏理论

说明:威科夫理论基于道氏理论

  • 前提假设 主要趋势不会被人操纵,价格反映所有信息
  • 主要原则

    • 市场存在三种趋势

    • 主要趋势分为三个阶段
      Acc,Public,Dis

    • 收盘价与线
      关键点位的收盘价

    • 相互验证
      工业指数,等指数的相互验证

    • 成交量的重要性

    • 趋势会已知延续,直到反转信号

4. 成功交易系统的最低要求

屏幕快照 2019-01-28 18.41.17

5. 胜率,盈亏比

盘整中追求高胜率(达60以上)
趋势中追求高盈亏比 (可以放弃一些胜率,比如在D段不断尝试)

胜率与盈亏比,交易频率的关系
屏幕快照 2019-01-28 18.54.10

6. 价格循环VS经济循环

股市是经济的晴雨表。股市领先于经济。

  • 价格循环
    屏幕快照 2019-01-28 19.01.01

  • 价格循环影响经济循环
    屏幕快照 2019-01-28 19.01.08

7. 如何辨认价格循环中的交易机会

  1. 确定交易性质(短线,中线,长线)
  2. 基于交易性质,辨认出价格循环中的交易机会(在大的交易循环中找到属于符合你的交易机会)

也就是不要摇摆不定。不要发现是短线机会而做了长线,也不要是做长线的而又做了短线

8. 市场角色分类

  • CM(优质持股人,强手)
    中央汇金,社保基金,国家队

  • Public(劣质持股人,弱手)

    • 共同基金(证券投资信托基金)
    • 对冲基金 (私募基金)
    • 小型保险公司
    • 专业交易人士
    • 普通散户

阿尔法驱动:考验基金经理的水平
贝塔驱动:市场的平均收益,比如上证ETF

Tip:共同基金,对冲基金的概念?ETF的概念?

9. 吸筹原理和事件

吸筹术语

  • PS
    初步支撑,在一段长期下跌后,大量的买盘开始提供明显的支撑,当最终支撑失败,价格随后任然创新低。成交量增加,价差扩大。那么下跌有可能接近尾声。(注意是可能,也有可能继续下跌,这个需要后期走势的验证,CM有机会大量的买进,完成一些建仓任务(比如10%的建仓任务),散户此时提供的流动性,正好给了CM建仓的机会)

  • SC
    市场出现恐慌,CM大量买进建立仓位(比如20%的建仓任务),散户因为害怕而卖出。经典的是大的价差,大的成交量。但也有可能是小的价差,小的成交量,然后突然上涨,原因是,可能在下跌中CM就边跌边买,公众该卖的都卖了,导致小的成交量,CM增加一点点买盘,就可以将价格迅速推高。

  • AR
    卖盘被耗尽,买盘可以轻易将价格推高,随后空头平仓继续推高价格,并通常形成长期下跌以来的最高的反弹。并且定义了TR的阻力水平。
    在AR处若果成交量较大,反弹力度较大,那么可能说明CM参与了反弹的购买
    如果成交量较小,并且反弹力度较小,可能是一个失败的AR。
    从AR的质量能大致能判定出ST的可能出现的最低点位置。

  • ST
    去确认在SC的是否真的发生,也就是否还有供应。通常好的ST是比SC更高的位置停止住。或者小量。也就是公众不会在以更低的价格卖出了。

  • Spring
    Spring最好是低量的,也就是不会有更低的卖盘。这个地方是机会也是风险点。

  • LPS
    在D段,有一些HH,HL,都是很好的LPS。

  • JOC(Major SOS)
    收盘价过区间最高点。(高量,宽价差),(低量,低价差),都可以。

  • SOS
    大的价差,放大的成交量,突破短期阻力

  • BU
    Backingup 回测,或者LPS

吸筹分段与目的

A段:PS,SC,AR,ST ---》停止下跌趋势
B段:UA,ST in B持股由散户转换到CM手中,也就是换手阶段,B段早起波动性较大,看空,看多的都较多。B段成交量会越来越小。通过B段的表现,判断C段可能发生的地方。--》建立原因,测试供应,产生需求
C段:Spring,SO(Shake out),LPS --》最后的支撑的测试
D段:SOS,LPS,JOC,BU(backUp) --》展现出摆脱区间的能力,确认阻力是否变成了支撑
E段:UpTrend(趋势分析的工具,如趋势线,均线),吸引买盘跟随(吸引公募私募专业交易者跟随推动价格进一不发展)或者再次吸收浮动供应。

Tip:盘感锻炼方法:手绘k线图,手绘点数图

我们主要在C段,D段做交易

如何寻找C段的边界(即如何定义C段)

找到前期局部支撑
刺穿前期局部支撑,左边界
收盘又在局部支撑之上,右边界

  • 局部支撑怎么找?

    良好的需求柱的底部
    ST

  • 总结

    如果是LPS,寻找前期支撑
    如果是Spring,就是ST的价格位置

支撑位要素
成交量,长时间,最近的支撑

2019/1/28 posted in  证券市场投资逻辑

GCD源码核心概念

  • dispatch_queue
    c8319b785fd73afa2150a3710190f3cd
    从这张图中能看出,我们创建的dispatch_queue_t实际上是统一由GCD Thread Pool来进行统一管理。他会根据多线程队列设置的Priority,来统一管理执行的优先级。

  • dispatch_async
    dispatch_async的流程是用链表保存所有提交的block,然后在底层线程池中,依次取出block并执行;而向主队列提交block则会向主线程的Runloop发送消息并唤醒Runloop,接着会在回调函数中取出block并执行。主线程,专门有个存储queue里需要执行的代码段。当执行到主线程的一个循环玩了后,会从这些队列里拿任务一个一个去执行。

当我们调用 dispatch_async(dispatch_get_main_queue(), block) 时,libDispatch 向主线程的 RunLoop 发送消息,RunLoop会被唤醒,并从消息中取得这个 block,并在回调__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__() 里执行这个 block

  • dispatch_sync

理解dispathch_sync 在执行的时候,会阻塞 上下文 任务的执行.

造成死锁的情况
在主线程里执行dispatch_sync(dispatch_main_queue,block);即,上下文环境是主线程,要将任务放到主线程里执行,而且是同步的。dispatch_sync会阻塞当前主线程,又要在主线程里执行block,所以会造成死锁。造成死锁的原因是“当前执行的上下文环境”与“即将要执行的任务也是这个环境"且是同步执行。同步执行不会开启新的线程,会在当前线程里执行。(所以同步执行将任务放到哪种队列没有关系,任务会在当前线程执行)哈哈哈。这个三个条件到达时就会死锁。终于弄懂了。

同步,异步的概念始终与当前执行代码的上下文线程有关系。同步就是讲当前放到其他队列里的任务拿到当前线程执行,执行完后然后返回,继续执行,执行完后返回,继续执行下面的代码。(也就说可以把加到其他队列里的任务拿到当前上下文的线程里去执行)。

  • dispatch_semaphore

  • dispatch_source
    dispatch_source是BSD系统内核kqueue的包装,kqueue() 生成一个内核事件队列,返回该队列的文件描述符。kqueue是在XNU内核中发生各种事件时,在应用程序编程方执行处理的技术。操作dispatch_source实际上就是,通过操作这个 kqueue,进而对内核事件的处理。(哈哈,这个终于可以解释通了)相当于可以监听内核的事件,然后给一个回调,并将回调的代码在指定的线程里面执行。

    特别说明:
    这里的dispatch_source与runloop里的source还是有区别的。dispatch_source是 内核事件,runloop的source是端口事件(线程通信的方式),timer事件源(runloop的Timer依赖于线程的runloop)。

重要理解
dispatch_asyn与dispatch_syn,dispatch_queue,任务队列是任务列,只管装任务。至于是在当前上下文线程,还是开启新的线程执行,是由同步还是异步决定的。同步不用新的线程执行,异步有创建新线程的权利。

2019/1/1 posted in  iOS基础概念

iOS UI视图相关深入

iOS事件传递的需要思考的问题

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {}
最终将这个fitView给了谁?
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { }
到底是谁在调用的?

经研究,最终将这个view给了UIWindow,UIWindow调用这个fitView得touchBegan方法。

整个事件首先在Application的事件队列里,然后通过UIWindow在view层级里是先从最后面的子view进行hitTest;找到fitView,然后将touch事件派发给它处理。或者view里有手势会先派发事件给手势处理。手势识别后会取消派发给fitView,UIWindow会调用fitView的touchBegan方法。后面的响应链条上touchBegan会被Pre-responder调用。若果不重写touchBegan,pre-responder会默认递归回溯调用。

  • 手势识别的内部调用机制?

  • TouchBegan,UIControl,手势识别关系?

iOS 布局

Frame布局

layoutSubviews,不手动调用
layoutIFNeeded(),在同一个循环里如果需要更新就执行layoutSubviews,然后放回。也就是在layoutIFNeeded里会做判定并且调用本类的layoutSubviews;

setNeedsLayout(),只要告诉标记需要更新界面,在下一个循环里会有一个检测是否需要更新UI布局的一个点来执行layoutSubviews,

  • drawRect 这是一个被重复调用的函数。重复调用会造成内存问题。

自动布局

  1. 更新约束
  2. 布局阶段
  3. 显示

updateConstraints(),不手动调用和layoutSubviews类似
updateConstraintsIfNeeded(), 和layoutIfNeeded类似
setNeedsUpdateConstraints(),和setNeedsLayout类似

intrinsicContentSize 属性,根据内容自然得到的属性。

视图布局更新与runloop的关系

2018/12/28 posted in  iOS基础概念

讨论架构时是在说什么

调用网络API
页面展示
数据的本地持久化
动态部署方案

那么需要解决的问题

  • 网络层设计方案?
    设计网络层需要考虑哪些问题?
    网络层的优化从哪里入手?

  • 页面展示层设计方案?
    页面的展示,调用,组织都有哪些设计方案

  • 本地持久化的设计方案有哪些?

  • 要实现动态部署,都有哪些方案

软件架构的思路

  1. 要解决的问题(问题是什么)
  2. 问题分类,用不同的模块解决不同类型的问题
  3. 搞清楚各个问题之间的依赖关系
  4. 推演预测未来可能的走向
  5. 先实现基础模块,在用基础模块堆积整个架构

View层的组织和调用方案

架构模式

  1. 如何划分MVC
    M,V,C
    在服务端的开发中V主要是指浏览器。
    在iOS开发中V主要是指self.view的容器

  2. MVCS
    将C的数据储存部分抽离出来,交给另一个对象去做,即store

  3. MVVM
    将C的数据处理部分抽离出来,交给viewModel处理。即vm
    而C负责View与ViewModel之间的绑定,以及UI逻辑处理

  4. VIPER
    (不懂)

总结:这些架构都是在MVC的基础上拆分出来的。天下架构出MVC,拆分方式的不同衍生出不同的架构。

是否应该使用BaseViewController?

尽可能不使用继承而是使用组合或者面向切面编程的AOP来替代。

  • 好处
  • 业务方集成成本小。(因为如果用了继承会导致,在集成到其他APP里时,需要依赖很多东西,打动干戈)
  • 新用户上手接收成本也减少了
  • 架构维护成本低

  • 目标

  • 业务方可以不用继承的方法,然后框架能够做到ViewController的统一配置。

  • 业务方即使脱离框架环境,

解耦定义

代码里不相互依赖,依赖分两种,单向依赖,双向依赖。

组件化的定义

让高层模块单向依赖低层模块,业务模块之间完全解耦

解耦的几种方式

  1. 代理
  2. block
  3. 通知
  4. kvo

组件通信实现

  1. runtime反射机制在Mediator里的实现,在通过对Mediator的category进行接口分离(本质是runtime的反射机制)
  2. 通过在Mediator里注册block,一般是进行url与block的映射(本质是存block)
  3. 同过在Mediator里注册protocal(本质是存class)

总结下:业务层可以依赖基础库,但业务层要相互不依赖。就需要依赖一个可以连接两个业务层的东西Mediator。为了防止业务层又与Mediator相互依赖。这里只允许业务层单向依赖Mediator。其实解耦可以是任意两个类之间实现单向依赖。只是将解耦应用到了对Mediator的单向依赖上。

组合与继承的选择

组合与继承都可以实现代码的复用
1. 除非两个类之间是"is-a"的关系,否则不要轻易使用继承
2. 两个类之间是has a的关系时,最好用组合

2018/12/27 posted in  iOS架构设计

Xcode里的Instruments的应用

TimerPofile

可以查看应用程序的那个方法耗时比较长,然后针对性优化

2018/12/22 posted in  iOS性能优化

数据结构与算法之美(专栏)

复杂度分析

时间复杂度

2018/12/21 posted in  算法