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、循环引用

[email protected]的作用:仅仅告诉编译器,某个名称是一个类

@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中不能声明同名的成员变量

时间: 2024-09-30 15:57:51

OC相关总结的相关文章

O-C相关05:方法的封装.

前言:在 OC 中进行封装, 就是实现设置实例变量和获取实例变量数据的方法, 常常称为 setter 方法和 getter 方法. 或称为 get set 读写器. 1,setter 方法 setter 方法又叫设置器, 是为实例变量对外提供的统一访问规则, 用于设置实例变量的值. 一般在开发中, 禁止将实例变量直接暴露到外面. 通过 setter 方法可以为赋值操作进行必要的控制与筛选. 起到了封装和控制的作用. 规则: 1)方法名必须以 set 开头, 然后跟上实例变量的名字(无下划线) 2

O-C相关-10-动态类型检查

10-动态类型检查 1.动态绑定 1)OC 中方法的调用不由编译器决定,而由运行时决定 2)OC 中没有方法调用,只有消息接收. 一般称消息为选择器 2.动态类型检查 对象在运行时获得类型的能力称为内省,如果在代码中想知道对象是否具有指定方法,可以使用: 1)判断类型或父类类型 -(BOOL)isKindOfClass:(Class)Obj 判断一个对象是不是有某个类或其子类实例化出来的对象 2)仅判断类型 -(BOOL)isMemberOfClass:(Class)obj 判断对象是不是被某个

O-C相关-[email protected]关键字简介与使用

基本概念:在O-C中,创建完类之后还需要给一个类添加属性和方法,之前说过的set和get方法比较繁琐,因此引入了@property 这个编译器指令.@property 是一个编译器指令.所谓的编译器指令, 即告诉编译器如何处理内容, 要做什么.@property 告诉编译器声明读写器( getter 方法与 setter 方法) 1.在今天的 Xcode 中, @property 可以同时生成实例变量, 方法的声明以及方法的实现. 2, 重写 getter 方法与 setter 方法 虽然 @p

OC相关-02:oc和c的基本差异

前言: 面向过程和面向对象. 简单的说,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为.两者的区别就在于面向过程是从事情的开始到结束顺序完成,而面向对象则是从一个事件中抽象出来不同的类和动作,再降类具体到每个对象.比如说,雨天打伞.面向过程就是:下雨了,我造了一把伞,然后打开.而面向对象解决这个问题,就是:下雨,人,

O-C相关04:类方法的概述与定义和调用

类方法的概述与定义和调用 1, 类方法的概述 类方法(class method)在其他编程语言中常常称为静态方法(例如 Java 或 C# 等). 与实例方法不同的是,类方法只需要使用类名即可调用, 不需要引用对象, 也就不需要创建对象了. 而实例方法必须是先将对象(实例)创建出来, 再利用对象来调用方法. OC 中使用 "+" 表示类方法, 使用 "-" 表示实例方法. 类方法与实例方法的定义比较: 2, 类方法的定义 3, 使用类方法的优势分析: -> 类

O-C相关-09-id 类型与应用

09-id 类型与应用 1, 使用 NSObject 访问子类对象方法 代码在编辑的时候, Xcode 会实时检查语法情况. 如果调用某个对象的方法, 在声明中没有该方法的声明, 那么就会报错. 但是对齐发消息, 是可以编译通过的. 但是运行时就不一定了. 2, id 类型 虽然可以利用发送消息执行可以调用子类方法, 但是相对较麻烦. 苹果提供了一个 id 类型, 该类型允许引用任何对象, 并且不会检查类型, 在使用的时候才会检查. 3, id 类型与 NSObject 的区别 -> NSObj

O-C相关-08-动态类型与静态类型

08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的ECMAScript(JavaScript)便是一个动态语言.除此之外如Ruby.Python等也都属于动态语言,而C.C++等语言则不属于动态语言. 而其实我们平时说的"动态语言"应该指的是"动态类型语言".至少我之前一直是这么认为的. 2) 动态类型语言 在运行时确定类

O-C相关-05:对象与对象的关系

对象与对象的关系 1.对象与对象的关系 依赖 关联 组合 常常讨论对象与对象关系时会提供两个属于:内聚性,耦合性 内聚一般指功能上的指向性 耦合一般指关联上的依赖性 2.依赖: 对象之间最弱的一种关联方式,是临时性的关联.代码中一般指由局部变量.函数参数.返回值建立的对于其他对象的调用关系. 依赖一般情况下是以下几种情况之一: a.ClassA中某个方法的参数类型是ClassB:  这种情况成为耦合: b.ClassA中某个方法的参数类型是ClassB的一个属性: 这种情况成为紧耦合: c.Cl

O-C相关-03:面向对象概念的具体介绍

1.面向对象的概念 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念,我这里把它定义为:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析.设计.实现软件的办法.通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应. 2.面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法.这种方法把软件系统中相近相似的操作逻辑和操作应用数据.状态,以类的型式描述出来,以对象