zoukankan      html  css  js  c++  java
  • 工作中的简单总结

    //知识点说明
    
     一、MVC 设计模式
     M (Model-数据模型)用于存储数据的数据模型,以及NSArray,NSDictionary等存储数据的Fundation对象
     V (view-视图)用于显示数据的视图,(UIView及其子类,还有我们自己封装的视图类等)
     C (Controller-控制器)
     (1、用于处理数据更新和视图更新的控制器,M和V之间没有必然的关联,C负责更新数据,然后在控制视图刷新,使视图显示新的数据
      2、数据不变,但需要数据在不同的视图显示时,也通过控制器控制选择不同视图的加载
      3、视图不变,需要显示不同的数据时,也是通过控制器控制视图加载不同的数据
     )
     
     二、NSUserDefaults  使用场景:
     1.用于存储少量的,固定不变的数据,如用户名和密码或者一些程序的设置信息等
     2.一个应用程序中只有一个NSUserDefaults,它实际上是一个存放在应用程序特定位置的一个plist文件
     3.NSUserDefaults用于存储的数据类型相对固定,不能存储UIViewController、NSObject等类实例化的对象,对象的存储用归档方法
     
     三、UITableViewCell的定制,步骤:
     1.当系统自带的cell样式不能满足我们的开发需求时,需要子类化(继承)UITableViewCell,进行cell的定制
     2.我们一般需要根据cell的需求,分析出定制cell需要哪些数据字段,根据需要的数据字段创建数据模型(一般继承NSObject创建)
     3.根据cell的需求样式,子类化UITableViewCell,添加需要的视图到cell的contentView上.
     4.在tableView所在的视图控制器上利用数据模型对cell进行内容填充.
     
     
     四、UIViewController的生命周期:
     1.- (void)loadView  首先执行的方法,如果此时ViewController没有视图,在这个方法中会创建self.view
     2.- (void)viewDidLoad  此时视图已经加载完毕,可以在这个方法中添加后续的视图,这个方法一般情况下只会被调用一次
     
     3.-(void)viewWillAppear:(BOOL)animated 当视图即将出现的时候调用此方法,此方法会被调用多次
     
     4.-(void)viewDidAppear:(BOOL)animated  当视图已经出现的时候调用此方法,这个方法会被调用多次
     5.-(void)viewWillDisappear:(BOOL)animated 当视图即将消失的时候调用此方法,这个方法会被调用多次
     6.-(void)viewDidDisappear:(BOOL)animated 当视图已经消失的时候调用此方法,这个方法会被调用多次
     
     7。-(void)viewDidUnload  在iOS6.0以前 当ViewController中开辟的内存到达一定限度时,会调用此方法,在此方法中,我们可以执行相关视图的卸载操作. iOS6以后不会调用此方法
     8.-(void)dealloc   //此方法会执行视图控制器以及视图控制器对应属性的销毁,在此方法中,我们需要release 之前alloc的对象
     
     
     五、retain,copy,assgin 的区别:
     
     1. atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
     2.atomic。设置成员变量的@property属性时,默认为atomic,提供多线程安全。
    // 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
       {lock}
      if (property != newValue) {
        [property release];
          property = [newValue retain];
       }
       {unlock}
     3. nonatomic。禁止多线程,变量保护,提高性能。
     4. atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
    //  指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。
    // 
      assign
    // 对基础数据类型 (NSInteger,CGFloat,BOOL)和C数据类型(int, float, double, char)等等。
    // 此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是可拷贝的。
    // 
      retain
    // 对其他NSObject和其子类对参数进行release旧值,再retain新值
    // 指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。
      注意: 把对象添加到数组中时,引用计数将增加对象的引用次数+1。
     
      copy
    // 对NSString 它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。 
    // copy与retain:
    // Copy其实是建立了一个相同的对象,而retain不是:
       1.比如一个NSString 对象,地址为0×1111 ,内容为@”STR”,Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同。
       2.新的对象retain为1 ,旧有对象没有变化。retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1。
       总结:retain 是指针拷贝,copy 是内容拷贝。
     
    // assign与retain:
    // 1. 接触过C,那么假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉。
    // 2. 了解到1中assign的问题,那么如何解决?最简单的一个方法就是使用引用计数(reference counting),还是上面的那个例子,我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用计数是1。当把a赋值给b时引用计数增加到2。这时如果a不再使用这块内存,它只需要把引用计数减1,表明自己不再拥有这块内存。b不再使用这块内存时也把引用计数减1。当引用计数变为0的时候,代表该内存不再被任何指针所引用,系统可以把它直接释放掉。
         总结:上面两点其实就是assign和retain的区别,assign就是直接赋值,从而可能引起1中的问题,当数据为int, float等原生类型时,可以使用assign。retain就如2中所述,使用了引用计数,retain引起引用计数加1, release引起引用计数减1,当引用计数为0时,dealloc函数被调用,内存被回收。
     
     
     六、代理的使用:
     //协议的声明,声明代理中包含的方法,并指明哪些是可选实现的方法,哪些是必须实现的方法
     //代理方法的调用:代理方法的调用者(委托类)决定声明中的方法在什么样的时机被调用,并将delegate作为自身的属性,用于指向代理方法的实现者
     //代理方法的真正实现: 代理方法的真正实现者会将自己的指针赋给代理方法调用者的delegate(delegate=self)属性,当调用者(委托类)调用到某个具体代理方法时,实现者进行代理方法的后续实现.
     
     七、类方法(+)和实例方法(-):
    // +表示类方法,-表示实例方法
       总结一下几点:
    // 1.类(static)方法
    // a. 类方法的调用
    // [类名称 类方法名称];
    // [Human   toString];
    // 
         注意:类方法
    // 1,类方法可以调用类方法。
    // 2,类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
    // 3,类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
    // 4,类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。
    // 
    // 2.实例方法
    // a.实例方法的调用
    // 首先需要实例化该类
    // Human *man = [Human alloc] init];
    // [类的实例  实例方法名称];
    // [man   showSex];
     
     
     八、常用的开发网站:
     
     //cocoaChina :http://www.cocoachina.com  (最大的中文iphone开发社区)
     
     //github :https://github.com/ (源码共享网站)
     
     //raywen:http://www.raywenderlich.com (支持中文版)
     
     //stackover flow :http://www.stackoverflow.com (有解决不了的难题时,这这个网站可能会带给你惊喜)
     pk.loca/1313/sina.json
     */
     
  • 相关阅读:
    IP,子网,子网掩码,网关,DNS到底都是啥(二)
    (能被11整除的数的特征)The shortest problem --hdu
    (匹配 匈牙利)棋盘游戏 -- Hdu --1281
    (匹配)Courses -- hdu --1083
    (匹配 最小路径覆盖)Air Raid --hdu --1151
    (匹配)The Accomodation of Students --HDU --2444
    (匹配)Fire Net --hdu --1045
    (二分匹配 模板)过山车 -- hdu --2063
    (连通图 ) Redundant Paths --POJ --3177
    (二分匹配 模板 KM)奔小康赚大钱--hdu--2255
  • 原文地址:https://www.cnblogs.com/ndyBlog/p/3999481.html
Copyright © 2011-2022 走看看