第一次总结

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

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

posted on 2015-05-25 13:47  自渔  阅读(155)  评论(0编辑  收藏  举报

导航