OC 面向对象 和 面向过程

参考

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

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

面向对象语言 : C++、 Java、 C#
重点概念: 对象、类、封装、继承、多态等等
面向对象3大特征:封装、继承、多态。
封装的思想:”麻烦自己,方便别人”。
两种编程思想:面向对象设计具有良好的可扩展性、可重用性。
类和对象类:具有相同特征和行为的事物的抽象。
对象:对象就是类的实例,类的具体表现。生活中的万物都是对象。类和对象是面向对象的核心。对象是类的实例。类是对象的类型。面向对象编程中使用对象完成程序。
开发中:先定义类,再创建对象,然后使用对象。
OC中类的定义定义类包含两部分:接口部分和实现部分。
接口部分:对外声明类的特征和行为。(类似说明书)
实现部分:对内实现行为。(内部的具体实现)
接口部分标志:@interface...@end作用:声明类的实例变量和方法,即特征和行为。包含内容:类名、父类名、实例变量、方法等。
实现部分标志:@implementation...@end作用:实现方法,即实现类的行为。
类和文件类:@interface...@end @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 ; weah : 用于 OC 对象,相当于 MRC 中的 assign ;

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

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

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


OC:面向对象的编程思想、基本的知识点总结、强,弱引用的更多相关文章

  1. IT第十九天 - 继承、接口、多态、面向对象的编程思想

    IT第十九天 上午 继承 1.一般情况下,子类在继承父类时,会调用父类中的无参构造方法,即默认的构造方法:如果在父类中只写了有参的构造方法,这时如果在子类中继承时,就会出现报错,原因是子类继承父类时无 ...

  2. 面向对象的编程思想和Java中类的概念与设计

    面向对象的编程思想学习,面向对象内容的三条主线;1.java类及类的对象2.面向对象的三大特征3.其他关键字学习内容:3.1面向对象与面向过程面向对象与面向过程在应用上的区别 Java中类的概念与设计 ...

  3. C++面向对象的编程思想机器人

    C++的面向对象的编程思想如下,一般情况为一个类中包含了这个对象的所有属性与函数,直接调用这个对象就可以对这个对象执行它可以使用的任何操作. #include <iostream> cla ...

  4. JS高级---面向对象的编程思想(贪吃蛇梳理)

    面向对象的编程思想(贪吃蛇梳理) 模拟贪吃蛇游戏,做的项目 地图: 宽,高,背景颜色,因为小蛇和食物都是相对于地图显示的, 这里小蛇和食物都是地图的子元素, 随机位置显示, 脱离文档流的, 地图也需要 ...

  5. Python基础之面向对象:1、面向对象及编程思想

    一.人狗大战 1.需求 用代码模拟人.狗打架的小游戏 人和狗种类不同,因此双方的属性各不相同 推导一: 人和狗各有不同属性 使用字典方式储存属性较为方便,并可储存多种属性 # 1.在字典内储存'人'属 ...

  6. Delphi面向对象的编程思想

    第一章.建立面向对象的新思维 1.1.1历史背景 目前对象技术的前沿课题包括设计模式.分布式对象系统.和基于网络的对象应用等 目前面向对象的语言包含4个基本的分支: 1.基于Smalltalk的:包括 ...

  7. Javascript 面向对象的编程思想

    面向对象,首先得有类的概念,没有类造不出来对象,,Javascript把函数名看成类. 其次分为不同结构层,如三层架构.MVC.MVVM. 本文根据实际项目演练,分为几个适用的结构层,如果项目不大一般 ...

  8. javascript中function和object的区别,以及javascript如何实现面向对象的编程思想.

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. Java编程思想:NIO知识点

    import java.io.*; import java.nio.*; import java.nio.channels.FileChannel; import java.nio.charset.C ...

随机推荐

  1. hdu 2899(数学基础+二分)

    题意:给了你一个函数,然后给了你x的变化范围,让你求出函数的最小值. 分析:它让你求的是函数的最小值,所以我们可以先对函数求导,得到的导数就可以判断函数的单调性了,求出导数后,我们发现如果函数的导数是 ...

  2. LruCache--远程图片获取与本地缓存

    Class Overview A cache that holds strong references to a limited number of values. Each time a value ...

  3. hdu 1541 Stars(树状数组)

    题意:求坐标0到x间的点的个数 思路:树状数组,主要是转化,根据题意的输入顺序,保证了等级的升序,可以直接求出和即当前等级的点的个数,然后在把这个点加入即可. 注意:树状数组下标从1开始(下标为0的话 ...

  4. LoadRunner界面分析(二)

    1.Controller 2.创建运行场景 3.方案设计 4.Resuls settting 5.监视方案

  5. 2016年JavaScript技术栈展望

    如果你正在筹划新的前端项目或者重构现有项目,那么你需要认识到现在的前端开发环境已经今非昔比,这其中有太多的选择了:React.Flux.Angular.Aurelia.Mocha.Jasmine.Ba ...

  6. 猎豹使用AI RoboForm填表

    最近,Chrome同步书签好慢,另外因为工作的原因,chrome还是用来做工作的事情,自己的事情准备换到猎豹,但是一个重要的问题是强大的自动填表工具AI RoboForm没有整合到猎豹的地方: 搜索了 ...

  7. VC远控(一)界面设计及套接字连接测试

    首先创建一个MFC项目. 选择基于对话框: 勾选Windows套接字 依次拉上各种不同的控件: Edit Control.Button.Tree.Static Text.List.Progress C ...

  8. HTML 学习进度备忘

    书签:”HTML 高级教程“及后面的内容尚未学习,另外跳过的内容有待跟进 __________________ 学习资源:W3School. 开始时间:2013.11.20 简述:此网址做为学习教程相 ...

  9. 前端面试题(JS篇)

    原题地址:http://handyxuefeng.blog.163.com/blog/static/454521722013111714040259/ 好吧,最近打算换工作,所以关注比较多的是面试题, ...

  10. DOM笔记(七):开发JQuery插件

    在上一篇笔记本中,讲解了如何利用jQuery扩展全局函数和对象:DOM笔记(六):怎么进行JQuery扩展? 在这篇笔记本中,将开发一个简单的动画插件,名称是example-plugin,用其实现一个 ...