你的位置:首页 > 操作系统

[操作系统]Objective—C基础学习总结


    1. (1)面向过程:一种以事件为中心的编程思想
        (2)面向对象:一种以对象为中心的编程思想
 
     2.get和set是用来访问和修改对象里的属性值
          注:OC里的命名规范,get方法名不需要加get前缀
                eg:    int age = [person getAge]; (false)
                         int age = [person age];(true) 
    
     3.  self是用来调用本类对象的实例变量和方法
          super是用来盗用从父类继承下来的方法 
 
     4.@property :为一个属性自动生成get和set方法
 
     5.类可以调用类方法,不可以调用实例方法,但可以通过创建对象来访问实例方法
 
     6.便利构造器:一种快速创建对象的方式,其本质是把初始化做了一次封装,方便外接使用(即:init的同时进行赋值)
     
     7. 单例模式:可以保证系统中一个类只有一个实例,并且该实例易于外界访问,从而方便实例个数的控制,得到节约资源的作用。
          (1)主要特点: 1⃣️一个类只有一个实例;
           2⃣️必须自己创建这个实例;
           3⃣️同时必须自行向整个系统提供这个实例.
 
          (2)实现角度: 1⃣️只提供私有的构造函数;
           2⃣️类定义中含有一个该类的静态私有对象;
             3⃣️该类提供了一个静态的共有的函数用于创建或获取他本身的静态私有对象).
 
   8.工厂模式:类似于互联网商业模式中的C2B
 
     9.面向对象的三大特征:封装、继承、多态
           (1)  1⃣️继承的作用:减少代码的重复,减少程序的设计时间;
        2⃣️多态定义:同一类型,多种表现形态
                     多态作用:解决冗余,可扩展和可维护性强
                     注:多态的条件中必须存在继承关系,子类重写父类方法,父类声明的变量指向子类
 
          (2) OC中的类都是单继承的
 
            (3) 方法的重写:1⃣️必须有继承,2⃣️子类方法和父类方法的定义一样
           
 
    10.字符串的长度使用length属性来获取;
      (1)扩展字符串:
          str1 = www
          str2 = baidu

     stringByAppendingPathComponent——> www/baidu
     stringByAppendingPathExtension——>www.bai
     stringByAppendingString—->wwwbaidu
     stringByAppendingFormat—->wwwbaidu

 
       (2)数组中不能存放基本数据类型
     (3)集合是无序的,存储的对象不允许重复出现
     
 
     11.内存管理:
          重点—————————————黄金法则—————————————————————
          当对对象使用了alloc、retain、[mutable]copy时,则必须使用相对应的release或者autorelease
         ————————————————————————————————————————
          
          (1)基本数据类型不需要内存管理(int,long,double,float,struct,char)
          (2)当一个所有者做了retain、alloc、copy操作时,则拥有了对象的所有权
                       当使用release,autorelease时,则释放了对象的所有权
          
           (3)1⃣️使用copy,alloc,new构造对象时,retainCount为1;
               2⃣️调用对象的retain方法增加1retainCount,调用对象的release方法减少1retainCount
               3⃣️当对象的retainCount为0时,delloc自动调用,自动释放对象内存,否则分配给对象的内存将一直被占用.
          
           (4)注意:属性的内存管理
              一个类有属性声明用了retain、copy,则必须在这个类的delloc方法中释放属性
 
          (5)autoReleasepool
               1⃣️对象将所有权交给最近的自动释放,并由其全权管理 (嵌套使用自动释放池)
               2⃣️自动释放池销毁时,会对里边的所有对象发送一条release消息
     
 
 
 
        12.ARC自动引用计数管理内存
          (1)不能使用releaseCoun属性t打印引用计数
          —————————————————————————————————— 
          (2)累的delloc方法中不能再去调用[super delloc];
          ————————————————————————————————
          (3)一个堆内存是否被释放,取决于__strong类型的栈指针是否为0,为0则释放内存,与__weak指针无关 ,weak主要为了防止交叉引用(代理模式)
        (4)ARC的黄金法则:::只要还有一个变量(指针)指向对象,对象就会被保存在内存中         
        (5)strong相当于retain,weak不允许在非ARC中使用
        (6)在ARC中,delloc方法一般都不需要使用,because we can’t  use release of object;  
 
         (7)注意:在使用KVO和通知时,must在delloc方法中移除
 
         (8)对某些文件禁用ARC
     Build Phases  ——>Comile Sources ——>选中文件添加——> —fno—objc—arc

 
          (9)对哪些文件使用ARC
         Build Phases  ——>Comile Sources ——>选中文件添加——> —fobjc—arc
               
 
           (10)X-xode自动转换工具最好只是用一次,使用之前先备份代码,备份代码,备份代码啊,否则后果不堪设想
 
 
13.类目、协议、扩展(扩展类的方法)
     (1)修改源代码,创建此类的子类
     (2)类目:1⃣️为现有的类添加一个或多个新的方法
          2⃣️可以被子类继承
        3⃣️可以作为原始类的一部分,与原始类中的方法同级(为已有的类添加新的方法。(只能添加方法,不能添加实例变量))
 
            注意:1⃣️类目中只能写方法,不能添加成员变量
         2⃣️同一个类可以添加多个类目,但不能重名
         3⃣️可以覆写现有类的方法,但覆写之后不能调用原始的方法
          
     (3)延展:在类的实现文件中定义的类目,延展是匿名的类目,定义私有的方法
                     就是定义自己的私有方法。(可以添加方法,或者实例变量)
     (4)协议:声明了可以被其他类实现的方法,协议不是类,只是其他对象可以实现的接口
          
      (5)instancetype和id异同点
     相同点:都可以作为方法的返回类型
     不同点:1⃣️instancetype可以返回和方法所在类相同类型的对象,而id只能返回未知类型的对象,
       2⃣️itancetype只能作为返回值,不能像id一样作为参数
 
14.KVC && KVO
   (1)KVC即:NSKeyValueCoding 一个非正式的协议,提供一种机制来间接访问对象的属性
     KVO就是基于KVC实现的关键技术,keyValueObserve,他能观察一个对象的KVC key Path 值得变化
 
   (2)KVO的使用步骤:
    1⃣️添加观察者
    2⃣️接收监听变更的方法:监听方法会在属性的值发生变化的时候自动调用
          
     (3)通知:
    //获取通知中心
    +(NSNotificationCenter)
    ////发送通知
    -(void)postNotification:(NSNotification*)notification