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  多线程和内存管理》

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

  • 相关阅读:
    select、poll、epoll之间的区别总结[整理]
    IO多路复用之epoll总结
    IO多路复用之select总结
    recv send 阻塞和非阻塞
    undefined reference to `pthread_create' collect2: ld returned 1 exit status
    网络编程 recv()函数
    strlen("汉字")的值是多少
    PPI协议详解 ppi通讯协议 ppi通信协议 vb与ppi协议通讯
    poj1651 Multiplication Puzzle
    poj2240 Arbitrage
  • 原文地址:https://www.cnblogs.com/liuziyu/p/4522008.html
Copyright © 2011-2022 走看看