• OC基础知识


    1、id 万能指针为什么不可以用点语法,但是它可以调用任何方法
    2、// 构造方法:用来初始化对象的方法,是个对象方法,- 开头

    // 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值

    /*

     重写构造方法的注意点

    1.先调用父类的构造方法([super init])

    2.再进行子类内部成员变量的初始化

    3、封装:是指对对象属性的封装

    4、OC的弱语法

    // OC是在运行过程中才会检测对象有没有实现相应的方法

    // 一旦运行过程中出错,就会闪退

    /*

     -[Person test]: unrecognized selector sent to instance 0x7fd2ea4097c0

     给Person对象发送了一个不能识别的消息:test

     */

    5、/*对象方法

     1> 减号 - 开头

     2> 只能由对象来调用

     3> 对象方法中能访问当前对象的成员变量(实例变量)

     类方法

     1> 加号 + 开头

     2> 只能由类(名)来调用

     3> 类方法中不能访问成员变量(实例变量)

      类方法的好处和使用场合

     1> 不依赖于对象,执行效率高

     2> 能用类方法,尽量用类方法

     3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法

      可以允许类方法和对象方法同名 */

    6、self->_age、_age、self.age


    7、self的用途:

     1> 谁调用了当前方法,self就代表谁

     * self出现在对象方法中,self就代表对象

     * self出现在类方法中,self就代表类

      2> 在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

      2> [self 方法名]可以调用其他对象方法类方法

    8、1.继承的好处:

     1> 抽取重复代码

     2> 建立了类之间的关系

     3> 子类可以拥有父类中的所有成员变量和方法

     2.注意点

     1> 基本上所有类的根类是NSObject

    9、1.重写:子类重新实现父类中的某个方法,覆盖父类以前的做法

     2.注意:

     1> 父类必须声明在子类的前面

     2> 子类不能拥有和父类相同的成员变量

     3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找

     2.坏处:耦合性太强

    10、super的作用

     1.直接调用父类中的某个方法

     2.super处在对象方法中,那么就会调用父类的对象方法

       super处在类方法中,那么就会调用父类的类方法

     3.使用场合:子类重写父类的方法时想保留父类的一些行为

    11、多态

     1.没有继承就没有多态

     2.代码的体现:父类类型的指针指向子类对象

     3.好处:如果函数方法参数中使用的是父类类型,可以传入父类、子类对象

     4.局限性:

     1> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

    12、多态其它书上还有一种说法(感觉不是很正确)

    多态是指相同的消息给与不同的对象会引发不相同的动作 

    13、方法

     1.对象方法都是以减号 - 

     2.对象方法的声明必须写在@interface和@end之间

       对象方法的实现必须写在@implementation和@end之间

     3.对象方法只能由对象来调用

     4.对象方法归类对象所有

     函数

     1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有

     2.函数调用不依赖于对象

     3.函数内部不能直接通过成员变量名访问某个对象的成员变量

    14、内存管理

    1.方法的基本使用

     1> retain :计数器+1,会返回对象本身

     2> release :计数器-1,没有返回值

     3> retainCount :获取当前的计数器

     4> dealloc

      * 当一个对象要被回收的时候,就会调用

      * 一定要调用[super dealloc],这句调用要放在最后面

     2.概念

     1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用

     2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)

     3> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错

    15、@property参数 

    1.set方法内存管理相关的参数

     * retain : release旧值,retain新值(适用于OC对象类型)

     * assign : 直接赋值(默认,适用于非OC对象类型)

     * copy   : release旧值,copy新值

     2.是否要生成set方法

     * readwrite : 同时生成setter和getter的声明、实现(默认)

     * readonly  : 只会生成getter的声明、实现

     3.多线程管理

     * nonatomic : 性能高 (一般就用这个)

     * atomic    : 性能低(默认)

     4.setter和getter方法的名称

     * setter : 决定了set方法的名称,一定要有个冒号 :

     * getter : 决定了get方法的名称(一般用在BOOL类型)

    16、循环引用

    1.@class的作用:仅仅告诉编译器,某个名称是一个类

     @class Person; // 仅仅告诉编译器,Person是一个类

     2.开发中引用一个类的规范

     1> 在.h文件中用@class来声明类

     2> 在.m文件中用#import来包含类的所有东西

     3.两端循环引用解决方案

     1> 一端用retain

     2> 一端用assign

    17、ARC的基本使用

     ARC的判断准则:只要没有强指针指向对象,就会释放对象

     1.ARC特点

     1> 不允许调用release、retain、retainCount

     2> 允许重写dealloc,但是不允许调用[super dealloc]

     3> @property的参数

      * strong :成员变量是强指针(适用于OC对象类型)

      * weak :成员变量是弱指针(适用于OC对象类型)

      * assign : 适用于非OC对象类型

     4> 以前的retain改为用strong

     指针分2种:

     1> 强指针:默认情况下,所有的指针都是强指针 __strong

     2> 弱指针:__weak

    18、成员变量的作用域(在分类中能访问哪一类成员变量?)

    @public : 在任何地方都能直接访问对象的成员变量

     @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)

     @protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)

     @package : 只要处在同一个框架中,就能直接访问对象的成员变量

     @interface和@implementation中不能声明同名的成员变量

     
  • 相关阅读:
    C#几个经常用到的字符串的截取
    写入Log错误日志
    AES 加密与解密
    支付宝小额免密支付和代扣区别:原来如此
    Sql server --触发器
    yum、ip、等命令无法不全子命令解决
    3、VNC
    6、DHCP
    2、OpenSsh
    VIM的使用
  • 原文地址:https://www.cnblogs.com/bluceZ/p/3936021.html
Copyright © 2020-2023  润新知