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. 解决mysql中文乱码(总)

    转自:http://hi.baidu.com/cnvienna/blog/item/2e99efdfd94fc61862279801.html MySQL会出现中文乱码的原因不外乎下列几点: .ser ...

  2. #1406 - Data too long for column (转)

    转自:(http://blog.sina.com.cn/s/blog_5115a74c01008e40.html) ERROR (): Data too long for column 解决方法 修改 ...

  3. liunx之tar 命令

    tar命令 可以用来压缩打包单文件.多个文件.单个目录.多个目录. Linux打包命令_tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包 tar ...

  4. 配置java环境时,java的path地址放在其他地址的前面还是后面?

      PATH环境变量里是按顺序查找的,如果电脑里只有一个jdk,放哪都一样,有多个放前面的会优先.   一般是放在最前面吧,以免其他在path中的程序需要用到Java环境而由于在JAVA_PATH之前 ...

  5. 输出图片的php代码前面不能有空白行

    第一行增加一个空白行,就至少会输出一个换行符在图片数据流的前面而图片是按图片流提供的信息显示的,前面多了内容就无法解析了.

  6. struts2 action 返回图片流

    数据库为mssql zp字段为image类型 java代码 OutputStream out = null; try { String contenttype = "image/jpeg&q ...

  7. 可以用google了

    半年都上不了google,现在可以了, 哈哈,支持自动更新, 有时候用google还是很不错的,尤其是英文搜索.

  8. Golang官方图片库

    Golang 的图片出来通过提供操作每一个像素点设置颜色(http://www.cnblogs.com/ghj1976/p/3441536.html) 和 提供通过可选蒙版图片重叠操作 (http:/ ...

  9. C语言实现strcpy

    strcpy.h: #ifndef STRCPY_H #define STRCPY_H #include <stdio.h> char *cat_strcpy(char *dst, con ...

  10. Spring MVC 问题列表:目录

    学习SpringMVC时遇到不少问题,这里将其汇总. 1.怎么搭建SpringMVC 2.SpringMVC和Spring使用是配置到一个文件中还是两个配置文件 3.SpringMVC接受从前台请求 ...