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. 凸优化简介 Convex Optimization Overview

    最近的看的一些内容好多涉及到凸优化,没时间系统看了,简单的了解一下,凸优化的两个基本元素分别是凸函数与凸包 凸集 凸集定义如下: 也就是说在凸集内任取两点,其连线上的所有点仍在凸集之内. 凸函数 凸函 ...

  2. UVa11582 Colossal Fibonacci Numbers!

    #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> us ...

  3. IP碎片原理:攻击和防护

    为了加深理解IP协议和一些DoS攻击手段大家有必要看看以下内容,也许对你理解这个概念有所帮助.先来看看IP碎片是如何产生的吧.         一.IP碎片是如何产生的       链路层具有最大传输 ...

  4. phonegap环境搭建

    最近在开发app, html5+php 采用phonegap进行打包 前端框架采用jquery mobile 这里phonegap创建安卓项目 3种方式 1.phonegap 2.cordova 3. ...

  5. Notepad 列编辑、正则查找、替换

    目标: 将源数据转成初始化sql语句.源数据: 104110040018,1,中国银行,中国银行天津琼州道支行,NULL,1100,天津市,12,天津市 104110040059,1,中国银行,中国银 ...

  6. 抛弃EF,20分构建一个属于自己的ORM框架

    Poiuyt_cyc 博客园首页新随笔联系订阅管理随笔 - 11  文章 - 0  评论 - 111 抛弃EF,20分构建一个属于自己的ORM框架 相信EF大家都不陌生了,因为数据库表跟程序实体是一一 ...

  7. Javascript模块化开发-轻巧自制

    Javascript模块化开发-轻巧自制 一.前言现在javascript的流行,前端的代码越来越复杂,所以我们需要软件工程的思想来开发前端.模块化是必不可少的,这样不仅能够提高代码的可维护性.可扩展 ...

  8. 图的邻接表存储表示(C)

    //---------图的邻接表存储表示------- #include<stdio.h> #include<stdlib.h> #define MAX_VERTEXT_NUM ...

  9. 14个最受欢迎的Python开源框架

    本文从GitHub中整理出的14个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Dja ...

  10. php 解压 .gz 文件

    在百度搜索到的 PharData 类和 ZipArchive 都是解压不了 .gz 的文件的,后来在 google 搜索到解决方法,问题解决. try { $phar = new PharData($ ...