zoukankan      html  css  js  c++  java
  • 第一次总结

    从4月1日入职,时至今日,已50日有余,新的工作内容,让我学会了大量的新知识,对于我的频繁询问和不解,要多多感谢新同事的无私帮助。今天终于完成了新模块的任务虽然很简单,但是却补充了大量的知识,有些是之前一直想学的,但是还是有很多不能灵活使用的技能,稍作总结如下(会持续补充):

    静心、勤思、多试

    1、MRC

    对于MRC的使用意义并不是很理解,为什么普及了ARC了,MRC还是生生不息,除了多写代码也多了出错的可能性,目前理解,也就是在都遵循内存管理的原则上增加了retain 和 relesase 而已。

    在ARC下所有的oc对象并不需要手动的添加retain和release,不管次对象是new、alloc 或者copy的。

    在MRC下,所有的实例变量(都是强引用)和属性在经过alloc、new或者copy之后都必须在dealloc中进行[obj release];obj = nil;操作,局部变量也必须在使用之后进行[obj release];操作,或者在创建时候使用autorelease,[[[objclass alloc]init]aurorelease];保证在对象最后的时候retainCount为0;否则会崩溃。在block中使用本对象指针的话要使用 weakSelf 指针

    __block class *weakSelf = self;

    相当于ARC 下的 __weak class *weakSelf = self; weak 指针。

    另: 在MRC 下使用网络请求时,不建议使用单利模式,而是每次请求的时候都创建新的请求实例对象,然后进行release 释放,避免形成retainCircle的情况。

    2、代理(委托)

    此前对委托的理解和使用比较局限,尽享对于系统中常用的委托有所认知和使用,实际项目中委托回调的使用确实非常方便非常多,使用两个类之间的参数传递。使用场景常常是具有拥有关系的两个类之间。

    最常见的场景是push 和 present 的时候设置 obj.delegate = self;(单层关系,多层的话可以考虑使用通知)

    在被拥有的类B中定义协议Bprotocol,并定义协议方法,然后在类B中定义属性@property (nonatimic , assign)id <Bprotocol>delegate; 

    在类A中,    1、a<Bprotocol>;

          2、b = [[B alloc ]init];

          3、b.delegate = self;

          4、a push(present) b;

    正向传值:使用属性直接赋值(实际是调用的set 方法)

    反向传值:使用代理(委托)。

    3、Block

    其实实现的也是回调的本质,同delegate,不过block 具有更直观的特性,可以理解为直接将block 的实现部分作为参数进行传递。

    首先:使用typedef定义Block类型

       typedef void (^RequestDidFinishedBlock)(id responseObject, int requestID);

       typedef void (^RequestDidFailedBlock)(id error, int requestID);

    然后:定义block类型的属性

      @property (nonatomic, copy) RequestDidFinishedBlock success;

      @property (nonatomic, copy) RequestDidFailedBlock failure;

    最后:在请求结果回调处给出对结果数据的处理逻辑。

    - (BOOL)recommendWithUID:(NSString *)user_id startWithCompletionBlockWithSuccess:(RequestDidFinishedBlock)success failure:(RequestDidFailedBlock)failure;

    4、XIB(AutoLayOut)

    使用xib 拖拖控件确实有优势,直观、速度快,但是缺点也很致命,出现问题不容易找,并且还特别容易出问题。

    首先:设置约束

    然后:设置关联

    最后:检查约束、检查关联(outlets)

    注:一般view 和 tableViewCell 的加载方式不同。

    注:使用xib 生成cell的时候 ,cell上的子控件都是直接加载cell 上的 而不是加载在cell。contentView 上,所以在ios 8 下没问题的cell 在ios7 下会不响应子控件的点击事件,所以要设置如下:

     cell.contentView.userInteractionEnabled = no;//忽略此层的事件响应链,直接向上传递

    或cell.contentView.hidden = yes;

    5、MVC

     根本原因是编程经验不足,对面向对象的编程没有深入的理解,所以导致我在ios 开发时候不能很好的遵循MVC的模式,一般都会将View的生成放在controller中,特别是cell的生成,导致了cell生成的代码特别冗长,扩展性差。

    modal:单独

    View:生成放在View.m中

    使用xib的情况下:还要使用awakeFromNib对view做一些处理

    例:

    - (void)awakeFromNib

    {

        [super awakeFromNib];

        

        self.contentView.userInteractionEnabled = NO;

        

    }

    controller: 负责控制

    6、AFNetWork

    由于ASI已停止更新,就更凸显出了AFN的必要性。过程使用大量的block传值。目前只用到比较简单的情况。

    其余如断点续传、大文件请求、缓存策略等需要进一步学习。

    7、真机调试

    需要开发者证书!

    回想过程还是比较复杂,并且到现在也没有太清楚流程。

    首先:appID、生成本机(MAC)钥匙串

    然后:发给组长,让其将此id添加入开发组中,注册邮箱会收到一个链接

    然后:进入链接,下载属于本组的开发者证书

    然后:preferance-》Accounts 添加对项目添加刚才的账户

    然后:在targets 和 project中添加 code signing identity 和 provisioning  profile (双击p12 文件添加即可) 

    最后:连接真机,选择模拟器为真机,run 即可

    8、打包ipa

    有时,不能使用xcode直接run 到真机(现在我MAC 上的 xcode 6.1.1 就不能run 到iphone 6的真机(ios 8.3)),那么就需要打包成ipa 包,然后再通过itools 安装入真机。(根据xcode版本的不同,可能流程和界面也不太一样)

    需要企业证书!(又是证书,另一个证书)!

    首先:在targets 和 project中添加 code signing identity 和 provisioning  profile (双击另一个p12 文件添加即可)

    然后:连接设备(ipad 、 iphone 或.......ios  设备)

    然后:product - 》 Archive

    然后:一路向下

    然后:Export

     最后:使用itools 安装

    9、leaks工具

    product- 》  profile  - 》 leaks 工具(建议选择手动)。

    如果使用的MRC ,强烈建议,要伴随leaks 和Analyze同步进行。

    10、MRC下使用ARC文件

    11、僵尸对象

    调试使用:product-》scheme-》editScheme

    用的不多,体会不深,主要看错误输出。

    12、必须坚持的读书计划

    想当初一头扎进ios ,并装逼似的也买了两本书,但是,至今仍然崭新无比,愧对了这么好的书了。

    《Effective Objective - C 2.0》、《Objective — C 高级编程  ios 与os x  多线程和内存管理》

    以后要坚持每天一个单元,即使不能静心理解,也要强推,相信熟能生巧。

  • 相关阅读:
    PAT (Advanced Level) 1080. Graduate Admission (30)
    PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
    PAT (Advanced Level) 1078. Hashing (25)
    PAT (Advanced Level) 1077. Kuchiguse (20)
    PAT (Advanced Level) 1076. Forwards on Weibo (30)
    PAT (Advanced Level) 1075. PAT Judge (25)
    PAT (Advanced Level) 1074. Reversing Linked List (25)
    PAT (Advanced Level) 1073. Scientific Notation (20)
    PAT (Advanced Level) 1072. Gas Station (30)
    PAT (Advanced Level) 1071. Speech Patterns (25)
  • 原文地址:https://www.cnblogs.com/liuziyu/p/4522008.html
Copyright © 2011-2022 走看看