面向对象编程思想以及强、弱引用总结

面向过程:使用步骤划分功能,然后用函数一步一步的调用。

面向对象:OOP (Object Oriented Programming) 使用功能来简化问题。

面向对象语言 : C++、 Java、 C#。

重点概念: 对象、类、封装、继承、多态等等。

面向对象3大特征:封装、继承、多态。

封装的思想:”麻烦自己,方便别人”。

两种编程思想:面向对象设计具有良好的可扩展性、可重用性。

类和对象类:具有相同特征和行为的事物的抽象。

对象:对象就是类的实例,类的具体表现。生活中的万物都是对象。类和对象是面向对象的核心。对象是类的实例。类是对象的类型。面向对象编程中使用对象完成程序。

开发中:先定义类,再创建对象,然后使用对象。

OC中类的定义定义类包含两部分:接口部分和实现部分。

接口部分:对外声明类的特征和行为(类似说明书)。

实现部分:对内实现行为(内部的具体实现)。

接口部分标志:@[email protected]作用:声明类的实例变量和方法,即特征和行为。包含内容:类名、父类名、实例变量、方法等。

实现部分标志:@[email protected]作用:实现方法,即实现类的行为。

类和文件类:@[email protected] @implementation…@end。

文件:.h称为接口文件或头文件, .m称为实现文件。文件和类本质没有关系。创建对象类是模板,对象是具体表现,任何对象都要占用内存空间。

创建对象分两步:分配内存空间和初始化。

分配内存空间:根据类中声明的实例变量为对象分配内存,将所有实例变量置为默认值0,并返回首地址。

初始化:为对象的实例变量设置初始值,+(id)alloc;+表示这个方法属于类,只能类执行。id返回值类型,表示任意类型的对象,即创建好的对象。-(id)init;-表示这个方法属于对象,只能对象执行。

id返回值类型,表示初始化完成的对象。使用对象 指针存储对象的首地址,代指对象。OC中使用指针代指对象,进行操作。实例变量操作实例变量在初始化只做少量设置,后期还需要进行设置。

实例变量区分可见度,共三种。

默认的可见度是@protected。

@public (公有) 实例变量可在类的外部和内部操作。

@protected:(受保护) 实例变量只能在该类和其子类内操作。

@private:(私有的) 实例变量只能在该类内访问public修饰的实例变量,可以直接使用“->”访问。

面向对象和面向过程是两种不同的编程思想,思考角度不同,前者以对象为中心,后者以事件为中心。类是对象的抽象,对象是类的体现。面向对象编程中,先创建出对应的类,再由类生成对象,进而完成我们的开发。

方法OC中的方法分两种:类方法(只能类使用) 和 实例方法(只能对象使用)。

OC中方法采用消息发送机制:【receiver message】 给对象发送消息setter 、getter。

OC中,为实例变量赋值的方法称为setter(设置器)。读取实例变量值的方法称为getter(访问器)。设置器用来为实例变量赋值,访问器用来取实例变量的值。

属性:@property (nonatomic,retain) NSString *name; @property (nonatomic,retain) NSString *gender; @property (nonatomic,assign) NSInteger age;相当于设置器与访问器,系统自动生成,直接调用即可,默认生成的实例变量可见度为私有。

(retain assign copy)为语义属性,声明对象时使用retain copy,声明基本数据类型时用assign。

自定义初始化方法- (id)init 这个方法只能给实例变量设置默认值,不灵活。- (id)initWithName:自定义初始化方法,根据需求定义初始化方法。

#import 导入头文件,#import””导入自定义类。#import<>导入;导入类库中的头文件,还可以根据路径去导入库中的文件。

@class 告诉编译器@class后的字符串作为类名使用,并未导入类的接口内容,有效避免嵌套循环导入。

继承继承的作用:既能保证类的完整,而且简化代码继承的特点:

1.一个子类只能有一个父类;

2.继承是单向的(只允许单继承);

3.一个父类可有多个子类;

4.继承具有传递性;

5.继承时会继承父类所有的特征和行为。

继承的内容:所有实例变量和方法。没有父类的类称为根类,OC中的根类是NSObject。

.super 编译器指令,并非对象。作用是:给super发消息,可以执行父类中实现的方法。

初始化方法创建对象分两步:开辟空间、初始化。

初始化方法的主要作用是:为某些实例变量赋初值初始化方法在对象的整个生命周期里只使用一次。

完整的初始化方法:- (id)init { 做安全处理 // self = [super init]; //执行父类中实现的init方法 if(self){ //初始化设置 } return self; }

便利构造器 : 封装了对象创建过程Block的使用:Block允许嵌套定义,定义时最后加;

返回值可以省略。如:int(^sum)(int x, int y) = ^(int x, int y){ return x + y;};挡在Block内部使用外部定义的局部变量时,如果变量没有被Block修饰,则在Block内部不能对它进行修改。若想修改,变量必须要有__block修饰。__block告诉编译器编译时在Block内部不要把外部变量当做常量使用,还是当做变量使用。如果在Block中访问全局变量,就不需要block修饰。

NSString NSArray NSDictionary NSSet NSNumber NSDate类的扩展分类,类目,category为没有源代码的类添加方法(只添加方法,不添加实例变量)是扩展一个类的的功能的方式之一,为原有类扩展的方法会成为原类的一部分,使用即可。分类也分为.h(接口部分)以及.m(实现部分)。.h文件中填写声明的方法,.m文件中填写方法的实现。

协议协议相当于任务清单,规定所要做的操作,谁服从协议,谁就要实现清单中的方法,所以协议只有.h文件,没有.m文件。协议要让类服从,服从完协议之后,要实现协议的方法。

内存管理OC中采用引用计数机制管理内存。

内存管理的基本原则:如果你对一个对象进行alloc retain copy 之后,你就拥有了该对象的所有权,就必须对它进行release或者autorelease。

autorelease: 会将声明为autorelease的对象放到离他最近的自动释放池中,当自动释放池销毁时,会向池中的每一个对象发送一个release消息。

release:立即释放当一个类的的对象引用计数为0时,系统会自动调用该类的dealloc方法来回收空间,该方法是由系统自动调用的,不用手动调用。

当把一个对象放入一个集合中(数组、字典、集合)时,会将对象的引用计数加1,因为内部做了retain操作,当collection(数组 集合 字典)空间被回收时,它们会向容器的每一个元素都发送一个release消息(对应添加元素时的retain操作)。当从collection中移除一个元素时,会release该对象,引用计数减1。

默认所有的指针变量都是强指针,被 _strong 修饰的指针,弱指针 被 _weak 修饰的指针。

stong :用于 OC 对象,相当于 MRC 中的retain ;

weak : 用于 OC 对象,相当于 MRC 中的 assign ;

assign : 用于基本数据类型,跟 MRC 中的 assign 一样

copy :一般用于NSString, 跟MRC中的copy一样

在ARC情况下解决”循环retain”的问题:@property 可以用weak。

时间: 2024-11-11 09:33:24

面向对象编程思想以及强、弱引用总结的相关文章

[Javascript] 面向对象编程思想

1.创建对象 1.1 new 用new进行创建对象: var user = new Object(); user.age = 12;//同时为对象添加属性 user.name = 'ajun'; 1.2{} 用{}创建对象,如: var user = { 'name':'ajun, 'age':12 } 这里同时候为user添加了两个属性分别为:name,age 在以上代码稍加改造,你还可以为一个对象添加一个方法,如: var user = { 'name':'ajun', 'age':12 '

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想的哲学起源(转载)

http://www.xuebuyuan.com/566309.html 本来想象着写一整篇「面向对象编程思想的哲学起源」这样的题目,笔走纸上,方才发现这样的题目足够出本书,知识不够,写不动.但心里还是想写点自己的所思所想. 全篇就拿JAVA来举例了.众所周知,面向对象的四大基本要素:抽象(Abstract).封装(Encapsulation).继承(Inheritance).多态(Polymorphism). 很多人坚持<逻辑学>是唯物哲学的基础,不懂,姑且不论.哲学就是对自然学科的抽象,看

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想(前传)--你必须知道的javascript(转载)

原文地址:http://www.cnblogs.com/zhaopei/p/6623460.html阅读目录 什么是鸭子类型 javascript的面向对象 封装 继承 多态 原型 this指向 call apply band js中的闭包 什么是高阶函数 在写面向对象编程思想-设计模式中的js部分的时候发现很多基础知识不了解的话,是很难真正理解和读懂js面向对象的代码.为此,在这里先快速补上.然后继续我们的面向对象编程思想-设计模式. 什么是鸭子类型 javascript是一门典型的动态类型语

第三章面向对象编程思想

""" 编码规范: 类名首字母应以大写字母开头 类的成员/属性: 成员属性 实例化对象的属性: self.name=name 可以被访问,也可以在类的外部被修改 私有属性 实例化对象的私有属性: self.__age=age 属性名前加两下划线 外部无法被访问, 也不能被修改,只能内部访问和修改 想要在外部访问只能自定义一个方法了 强制访问 私有属性: p._People__age 对象名._类名__私有属性 公共属性: 类的属性,也叫静态属性,他是在类的内部定义的 clas

面向对象编程思想(OOP)(转发)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想 - 月亮晶石的日志 - 网易博客

面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计. 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统).这可以使系统直接地映射问题域,保

面向对象编程思想2s

面向对象编程思想 抽象 封装和数据隐藏 多态 继承 代码的可复用性 面向对象分析 五个层次.五个活动组成 目的 1.获得系统的对象个体.个体内部的状态.个体与个体间的交互 活动 1.建模系统功能 2.发现并且确定业务对象 3.组织对象并确定其关系 抽象 舍弃个别的.非本质的特征,抽取共同的.本质的特征 ss 原文地址:https://www.cnblogs.com/cnblogzaizai/p/12028791.html