初出茅庐之OC总结笔记(第一篇)

题记:要想把UI学好,首先要对OC有一个清楚的认识,因为UI的代码是在OC的基础上建立起来的.学了这么长时间的UI觉得很多OC前面的很多对于学习UI有很大的帮助和作用,尤其是在理解和运用方面.如:KVC,属性传值,手动管理内存,代理模式等等在UI中运用很多.

今天主要说一下关于内存管理方面的知识.

在讲解内存管理之前呢,先和大家探讨一下OC.

对OC的理解:

OC面向对象的变成的一种, 那么什么是面向对象的编程呢?很多人也就知道个大概,不知道如何形容和描述它.我认为呢,其实只要你打的代码多了,慢慢的你也就懂了.哈哈,觉得是不是有点太敷衍了....

面向对象: 我对面向的编程是这样理解的:面向对象,说白了也就是以对象为根本,对象要做什么,我们通过对象要达到怎样的目的,我们所说的对象是抽象的,万事万物都可以是对象,这里的对象是一个大范围的概念,比如:导演就是一个类,因为导演是一类人嘛,这里就不对类这个概念进行阐述.很容易理解. 那么做导演拍电影的王晶这个人就是一个对象.也就是说我们落实到一个特定的人头上而不是一个抽象的集合,那么它就是对象,对象是锁定一个特定的事物,而不是一个类群.

OC是面向对象的, C语言,C++等等都是面向过程的编程,那么二者的区别是什么呢?

面向对象和面向过程编程的区别:

面向对象:通过类来创建一个对象,然后再通过对象来进行你需要的操作最后达到你想的目的. 

面向过程:直接根据你想要达到的目的进行编写相应的代码,也是达到你要的结果.

说这些概念可能还有些抽象,接下来我们来举一个生活中的实例:<<钟点工>>这个小品都看过吧.赵本山和宋丹丹的.里面就有一个过程,我们可以用这个小故事来区别一下面向对象和面向过程

要把大象装冰箱,请问总共分几步?

面向对象会这么做:

第一步:得到大象这个对象;

第二步:得到冰箱这个对象;

第三步:通过冰箱这个对象调用相应的方法去把冰箱门打开;

第四步:然后再写一个方法接下来把大象放到冰箱里;

第五步:再调用冰箱的方法把冰箱门关上;

面向对象就搞定了!

那么面向过程会怎么做呢?

面向过程会这么做:

可能会定义一些指针,创建一些函数,然后最后把大象放到冰箱里.(不详细解释)

个人觉得:面向过程顾名思义,注重过程,它是根据要达到的目的去想办法创建怎样的函数去达到目的.主要是注重这个大象放到冰箱里的过程,无论怎么做,只要放到里面就可以了,可以有多种办法.      面向对象呢就是要严格的定义好要做什么,给了我什么,哪个对象该做什么样的事情.步骤严谨而且有条理.很清晰.

总结面向对象的变成思想:

第一:分析对象所涉及的类;

第二:根据功能去定义相应的类;

第三:使用对象去调用方法,完成一系列的操作,达到想要的目的.

顺便提一下:面向对象的变成呢有三大特性:继承,封装,和多态.这个在以后会慢慢讲解.

接下来才是重点:IOS的内存管理

今天关于内存管理我们先学习一下它的原理和机制...     下一篇文章会详解:敬请期待哦~

内存管理在IOS中分为手动和自动管理,一般来说我们都是手动管理内存,不让系统帮我们管理内存,这样做为了防止内存内存出现问题.

先说说我们用的IPhone手机,手机有时候总是出现闪退,百分之九十以上都是因为内存问题....

所以呢我们学习IOS编程的时候一定要养成好的习惯,即alloc了就要release一下,或者autorelease.

内存问题主要分为两大部分:内存溢出 和 野指针异常

内存溢出:说白了就是超出手机内存上线了,在我们的应用程序里图片,音频,视频占用了很大的一部分内存空间,当它们一超出内存上线,那么就会出现闪退或者crash现象.

野指针异常:就是我们定义的对象没有及时的释放,当你再用的时候,有时候也能用,但是一旦野指针中的内存被别的应用占了,那么就会可能crash.这样的错误很常见.


内存管理机制简介:


为什么要说内存管理呢?  因为它非常重要,使我们开发应用十分重视也是十分担忧的. 

在OC中是自带垃圾回收机制的,但是在iOS中没有,iOS有内存管理机制,也就相当于垃圾回收的功能.

内存管理的原理和机制:我们通过操作引用计数来管理内存,内存管理的最常用的操作引用计数的关键字是 " retain release 和 autorelease "

当你retain一个对象的时候,引用计数会加一

当你release一个对象的时候,应用计数会减一

autorelease有些不一样,它是在未来减一,就是这个方法执行完毕,才会减一,具体的还是要看你需不需要用到它.

还有就是,一般来说当你没有创建一个对象的时候,它的引用计数为0(NSSting除外) 当你alloc创建的时候,它的引用计数就为1了.   当你release释放的时候,它的引用计数变成0.然后就会走dealloc方法释放内存.此时对象才销毁. 即在iOS中内存不会自动销毁,当引用计数为0的时候,会走系统的dealloc方法进行内存销毁.此时内存才得到释放.

返回内存引用计数为一的关键字:alloc new copy 即当你使用这三个关键字创建对象的时候,他们返回的对象的内存的引用计数此时就为1

例如下面这样一段代码:

Car是一个类;

Car *myCar = [Car alloc] init]; 初始化一个Car类型的对象myCar.  --------> 此时的引用计数 为1.

[myCar retain];   -------->此时的引用计数会加一,变成了2.

[myCar release]  ------->此时的引用计数会减一,变成了1.

[myCar release]  ------->此时的引用计数又会减一,变成0.

就像之前说的当引用计数变为0之后呢,系统会自动调用dealloc方法,销毁对象所占的内存.此时对象就不存在了.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值