zoukankan      html  css  js  c++  java
  • 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中不能声明同名的成员变量

     
  • 相关阅读:
    Something I know about WebDynpro
    Details about support package implementation
    CRM Middleware Performance Topics
    Way to configure the logon navigaion layouts via Business Roles in CRM
    DOM 常用节点类型和方法
    第一届 xdef 会议日程
    去除百度音乐盒广告的chrome插件 持续更新
    从人人网抓取高校数据信息,包括,省份 高校 院系 (提供最终SQL文件下载)
    PHP 与 JSON
    解决HTTPS 发送请求走socket问题
  • 原文地址:https://www.cnblogs.com/bluceZ/p/3936021.html
Copyright © 2011-2022 走看看