【读书笔记】iOS-内存释放

一,有些编程人员喜欢将内存清理的代码集中组织到函数中的某个地方,而另一些编程人员则喜欢在创建点自动释放对象,以免以后忘记释放这些对象。两种方法都是有效的。

二,id类型表示一个可以指向任何类型的对象的指针,它是一个泛型对象类型。你可以将任何对象赋值给一个id类型的变量,也可以将一个id类型的变量赋值给任何类型的对象指针。如果一个用尖括号括起来的协议名称跟随在id之后,则编译器将知你期望任意类型的对象,只要其遵守该协议。

三,正式协议的概念,可以通过在@protocol部分列出一组方法名来定义一个正式协议。通过在@interface声明中的类名之后列出用尖括号括起来的协议名称,对象可以采用该协议。当对象采用一个正式协议时,它承诺实现该协议列出的每一个要求实现的方法。如果你没有实现协议中的所有方法,编译器将向你提出警告,从而帮助你履行自己的承诺。

参考资料:《Objective-C基础教程》

时间: 2024-08-07 17:01:14

【读书笔记】iOS-内存释放的相关文章

读书笔记——IOS之Web开发

Web开发 读书笔记:http://www.mincoder.com/article/2576.shtml 主要的请求方法 Get请求:数据以明文在URL中,数据量小 Post请求:数据大小没有限制 HEAD请求:请求头信息 程序的实现需要借助几个对象: NSURLRequest:建立了一个请求,可以指定缓存策略.超时时间.和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSMutableURLRequest则可以指定请求方法(GET或POST)等信

C++primer第十二章读书笔记---动态内存与智能指针

    目前为止我们使用过的静态内存,栈内存和内存池,静态内存用来保存局部static对象.类static成员,以及定义在任何函数之外的成员.栈内存用来保存定义在函数内部的非static成员,分配在静态 内存或栈内存中的对象由编译器自动创建或销毁,对于栈对象仅在其定义的程序块运行时才有效,static对象在程序运行之前分配,程序结束时销毁.除了静态内存和栈内存外,每个程序还拥有一个内存池(堆)在堆上分配动态对象,当动态对象不再使用时,我们必须显示的销毁它.     (一).动态内存与智能指针  

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-3]

2.3.2 截获自动变量 通过转换后的源码可以发现,Block语法中使用的自动变量被作为成员变量追加到__main_block_impl_0结构体中,Block中没有使用的自动变量不会被追加,所以Block的变量截获只针对Block使用的自动变量. 源码: #include <stdio.h>//不导入库文件无法运行 int main() { int val1=0; int val2=10; void(^testBlock)(void)=^{ printf("i am testBlo

[读书笔记]iOS与OS X多线程和内存管理 [GCD部分]

3.2 GCD的API 苹果对GCD的说明:开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中. "Dispatch Queue"是执行处理的等待队列.通过dispatch_async函数等API,在Block语法中记述想执行的处理并追加到Dispatch Queue中,Dispatch Queue按照追加的顺序,执行处理. Dispatch Queue分为两种: 种类 说明 Serial Dispatch Queue 等待现在执行中处理结束(顺序执行) Co

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-4]

2.3.5 __block变量存储域 Block变量从栈复制到堆时对__block变量产生的影响 __block变量存储域 影响 栈 从栈复制到堆并被Block持有 堆 被Block持有 在多个Block中使用__block变量时,第一个Block从栈复制到堆时,__block变量也一并从栈复制到堆.在之后的Block从栈复制到堆时,__block变量被Block持有,__block变量引用计数增加.之前__block变量结构中的__forwarding能够做到"不管__block变量在栈上还是

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-2]

2.3 Blocks的实现 2.3.1 Block的实质 通过命令"clang -rewrite-objc 文件名"能够将含有Block语法的源代码转换为C++源代码. 含有Block的源代码如下: #include <stdio.h>//不导入库文件无法运行 int main() { void(^testBlock)(void)=^{ printf("i am testBlock"); }; testBlock(); } 转换后的代码有五百行左右,这里

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-1]

第二章 Blocks 2.1 Blocks摘要 Blocks是C语言的扩充功能,是带有自动变量(局部变量)的匿名函数. Blocks保存自动变量的值. Blocks不是Objective-c独有的概念,在其他语言中(如Smalltalk或Ruby)也有对应的概念. 2.2 Blocks模式 2.2.1 Block语法 ^ 返回值类型 参数列表 表达式 返回值类型可以省略 ^ 参数列表 表达式 参数列表也可以省略 ^ 表达式 2.2.2 Block类型变量 可将Block语法赋值给声明为Block

LDD读书笔记_内存管理

本部分不仅仅是LDD的介绍部分, 还包括了对linux的内存模型的总结. 一句话总结 伙伴系统是基石, slab基于伙伴系统, kmalloc基于slab. 要点 ?伙伴系统是对连续大内存而言, 得到的内存的单位从1个page到211 page, 解决外部碎片问题. ?Slab分配器是针对小内存而言, 从32B到128KB, 解决的是内部碎片问题, kmalloc是基于slab分配器的. ?如果物理内存加上需要映射的IO空间内存的大小加起来超过896M, 则有必要开启highmen的功能. Ag

&lt;&lt;深入分析javaWeb技术内幕&gt;&gt;读书笔记-JVM内存管理2

JVM垃圾回收策略 1.静态内存分配和回收 编译时已经确定了内存空间大小,程序被加载后则一次性分配好内存空间.程序结束后,则对应栈帧撤销,分配的静态内存空间则被回收. 2.动态内存分配和回收 程序运行动态分配内存空间,回收时则由垃圾收集器负责. 3.垃圾收集器 A.正确的检测出垃圾对象(关键功能) B.释放垃圾对象占用的内存空间 4.基于分代的垃圾收集算法(hostpot) 算法设计思路: 把对象按照寿命的长短进行分组(年轻代,年老代),新创建的对象分配在年轻代中,对象经过几次垃圾回收后,仍然存

《Linux内核设计与实现》读书笔记之内存管理

1.页 内核把物理页作为内存管理的基本单位,MMU(内存管理单元)以页为单位来管理系统中的页表,从虚拟内存的角度来看,页就是最小单位. 内核用struct page结构来标识系统中的每一个物理页,它的定义如下: flag域用来存放页的状态(是不是脏的,是不是被锁定在内存中等等)._count表示这一页被引用了多少次,当次数为0时,表示此页没有被引用,于是在新的分配中就可以使用它.virtual域是页的虚拟地址. 2.获得页 内核提供了一种请求内核的底层机制,并提供了对它进行访问的几个接口.所有这