Objective-C知识点总结

(  一  )
1、OC语言常用类型
          1)、关键字加@,因为支持混编,为了区分
          2)、OC里面的字符串、NSLog与printf
          3)、常用类型:整形NSInteger、布尔类型、结构体NSRange、NSString *s = @“”;
     2、画图讲解面向过程与面向对象思想
               如果做一个播放器,面向过程(C):首先要考虑功能,播放、暂停、上一首、下一首。。。
                                                面向对象(OC):首先考虑的是对象,播放器、显示器、电池。。。,功能与对象关联,对象很重要,首先有对象,然后再通过对象调用功能
     3、类与对象的概念
     4、类的定义
          属性:全局变量(属性、成员变量、实例变量)加下划线(与局部变量区分,不加也可以)
          注意:OC中不能在定义属性时赋值
          方法:(行为)
                    不带参数的方法的声明、实现(属性不需要实现)
          导入:import与include、导入.m文件时的错误
          
          有参数的方法定义
          带多个参数的方法定义
           有返回值的方法定义
     5、类方法的定义
          类方法与实例方法的区别:类方法不能访问属性
(二)
一、自定义初始化方法(5min)
     1、init方法只能在初始化时调用
     2、自定义初始化方法可以带参数(命名规则)
     方法命名:类名首字母大写,变量名和方法名首字母小写,使用驼峰标示
二、self与super关键字
          id关键字:可以代表任何类型(代码演示)
          self关键字:在方法里面,哪个对象调用了此方法,self就是指的哪个对象,哪个类调用了就是指的哪个类(函数中不能调用self)
          类方法的self调用
三、点语法
     点号左边是赋值,调用的是setName,
     等号右边是访问,
     代码演示:定义一个类,{属性、方法(初始化方法、set与get方法、普通方法)}
              规则1: 点语法调用set方法,点语法在等号左边,调用set方法
      点语法注意:1、只能调用set或者get方法(或者格式相同的方法)(可以尝试用点语法调用普通方法,调用不到)
      //点语法后面的name和age不是属性,是set方法的后半部分
     规则2:点语法在=后边,调用的是get方法

     //点语法注意:
set与get方法的概念:
          set方法:set开头,带一个参数
          get方法:有返回值,无参数
四、命名规则  变量命名与C语言相同,类名首字母大写,方法名首字母小写
五、类与类之间的关系
     继承
     关联:两个类之间存在一种联系,Person、Dog、Car  
(三)

一、封装

     1.属性封装

          处于安全性考虑,我们一般不在成员变量名前面使用。@public@protected等关键字修饰,而是使用Set方法来为对象提供成员变量的值。 

     @public  公开的,public修饰的成员变量外部可以直接访问

     @private  私有的,只能在类的内部才可以访问

               子类不可以访问private修饰的属性

     @protected 受保护的学会难过,类的内部,子类都可以访问,类的外部不能访问

     @package 修饰的变量,这个变量只能在当前所在的框架中使用(很少用到,但是系统会用到)

     

     1)使类的属性不让外部直接访问

     2)外部使用这个类时,不需要关心这个类具有哪些属性


     2,方法的封装

          只是调用方法,不去关心方法里面是如何实现的,只是知道调用这个方法可以达到我的需求。不关心.m文件中的实现

     1)对功能实现细节的隐藏与封装

     2)保护属性(保护属性的有效性)

二、继承

     1、概念:可以多层继承,但是每个类只能有一个父类

          子类可以继承父类的属性与方法,减少代码量,

          把子类中共有的东西抽出来,作为一个父类


    

**super关键字

          卡车中不光有自己的方法,还有从父类继承下来的方法

           [super 方法名];会调用父类的方法

           [self 方法名];会先从本类中查找方法,如果有,会调用,如果没有,会调用父类的

           self 调用当前方法会导致死循环问题


**方法重写:

    

    满足条件:1、必须有继承关系

                      2、参数列表必须一样(方法名和参数列表完全一致)

三、多态   

          同一种类型的不同表现形态

          1、必须存在继承关系

          2、子类重写父类方法

          3、父类声明的变量指向子类对象

 

四、#import@class的区别

#import是把头文件拷贝

//如果这里使用#import,会引起相互包含,程序运行出错

//@class 只是告诉编译器有这么一个类,在别处声明好了,但是类的具体实现不知道

.h 文件里用@class ,在.m 文件中用#import
(四)
一、类目
     比较简单
     1、给NSString扩展一个方法:验证邮箱,我们目前所学的知识:写一个子类,写一个方法来实现。 但是,NSString是不能被我们自定义继承的,还有NSArray,NSDictionary等,一般不要写一个类继承与Foundation中的类
     在子类中写一个验证方法,可以解决,但是,在以后想调用此方法时,只能通过新增加的类去创建,增加了类增加了项目的复杂度    
     一般写方法在.h文件中声明,在.m文件中实现,但是我们不能修改NSString的.h文件,我们也访问不到NSString的.m文件 
     还可以通过类目
     选择OC文件,选择Category,Class中选择要为哪一个类拓展类目
     为一个类扩展一个类目以后,在类目中写方法,这个方法属于这个类的一部分,可以被这个类的子类继承
     缺陷:1、不能为类拓展实例变量(属性)
                2、可以覆写类中原有的方法,覆写后,原始方法不能被调用(一般不推荐为OC提供给我们的类覆写方法)
二、延展(匿名的类目)
     私有方法
三、定时器
     代码不会停在定时器里,执行过了,会在每个X秒调用一次所调用的方法
     停止的话,需要用定时器对象来控制NSTimer
     
四、协议(消息的传递)
     1、现实中的协议,租房子
     2、协议不是一个类,而是定义了一组方法,让其他类来实现,他要做的仅仅是声明
     协议定义了一组方法,这些方法是需要谁签订了协议谁去实现
五、小孩与保姆 
六、代理设计模式:
     1、一般谁有事请自己做不了,需要别人帮,我们就在这个类的.h文件中定义协议
     2、在这个类中需要一个代理对象(属性),该代理对象要实现定义的协议
     3、代理在自己的类中对协议方法做实现
     4、代理调用代理方法
(五)
一、为什么要进行内存管理。
由于移动设备的内存极其有限,所以每个
APP 所占的内存也是有限制的,当 app 所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。
管理范围:
任何继承 NSObject 的对象,对其他的基本数据类型无效。
本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露。

二、 给对象发送消息,进行相应的计数器操作。
Retain 消息:使计数器 +1 ,该方法返回对象本身
Release 消息:使计数器 -1 (并不代表释放对象)
retainCount
消息:获得对象当前的引用计数器值
三、 当一个对象的引用计数器为 0 时,那么它将被销毁,其占用的内存被系统回收。
当对象被销毁时,系统会自动向对象发送一条 dealloc 消息,一般会重写 dealloc 方法,在这里释放相关的资源, dealloc 就像是对象的“临终遗言”。一旦重写了 dealloc 方法就必须调用 [super dealloc] ,并且放在代码块的最后调用(不能直接调用 dealloc 方法)。
一旦对象被回收了,那么他所占据的存储空间就不再可用,坚持使用会导致程序崩溃(野指针错误)。
四、原则
(1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法(黄金法则)
(2)不是你创建的就不用你去负责
(3)谁retain,谁release

五、@property 的参数
(1)内存管理相关参数
Retain:
对对象 release 旧值, retain 新值(适用于 OC 对象类型)
Assign:
直接赋值(默认,适用于非 oc 对象类型)
Copy:release
旧值, copy 新值
(2)是否要生成
set 方法(若为只读属性,则不生成)
Readonly:
只读,只会生成 getter 的声明和实现
Readwrite:
默认的,同时生成 setter getter 的声明和实现
(3)多线程管理(苹果在一定程度上屏蔽了多线程操作)
Nonatomic:
高性能,一般使用这个
Atomic: 低性能
(六)
iOS4.3支持功能不完善的ARC,只是不能使用weak
     不是垃圾回收机制,不是垃圾回收,还是内存管理,引用计数
一、
     1、只要还有一个变量(指针)指向对象,对象就会保存在内存中,就像气球可以有好几根绳子,绳子都断掉的时候,气球销毁
  •      ARC中,dealloc方法中不允许调用[super dealloc];
  •      ARC中,不允许使用retainCount属性打印引用计数
  •      ARC中,不允许使用retain,release,autorelease,但是copy可以使用
     只要     
     2、strong:只要有指针指向对象,对象就不会被销毁,默认所有实例变量和本地变量都是strong类型的指针(strong reference)
       weak:弱引用,当弱引用指向的对象不存在了,弱引用会指向nil
     3、__unsafe和__unretained
          和weak功能一致,区别是当对象指向的对象销毁后,不会将变量重置为nil,这样会有可能调用野指针
二、ARC使用注意
     1、创建一个对象时不能使用__weak
     2、关于数组取值后将数组移除所有元素的问题
三、ARC与非ARC混编(-fno-objc-arc)
四、Xcode转换工具(使用注意:尽量每个文件只使用一次,使用前保留副本)
(七)
一、KVC键值编码
     setValue:() forKey:()/valueForKey
     setValue:()forKeyPath/valueForKeyPath
二、KVO
     1、属性改变必须书通过KVC或者set方法改变
     2、第一步:添加观察者
     第二步:接收变更通知
     第三步:移除观察者
三、通知
     1、发出通知
     2、添加通知的监听器
     3、移除通知
四、谓词
     定义谓词条件
     把谓词交给数组
     重点在于怎么定义条件(常用格式)

你可能感兴趣的:(移动开发,编程语言,objective-c,OC,iOS)