随笔分类 -  格而知之

这个分类存放的是自己钻研的一些内容。
摘要:23、在前文中的例子中,Block结构体里的isa指针还没有详细讲解,这个指针都被置向了_NSConcreteStackBlock,它标识了Block的类型。 其实除了_NSConcreteStackBlock这个类型外,Block还有其他的类型,这些类型总共有3种: (1)、_NSConcrete 阅读全文
posted @ 2016-09-16 14:12 杨淳引 阅读(246) 评论(0) 推荐(0)
摘要:11、那么Block到底是怎么实现的呢?试一试通过将Block 的代码转换成普通C语言代码来查看它的实现过程。 要将OC代码转换成C语言代码,可以使用clang编译的一个命令: 通过这个命令能把指定文件中的OC代码改写成C++代码(其中主要部分还是普通的C语言代码),通过这些代码就能看到Block是 阅读全文
posted @ 2016-09-16 13:59 杨淳引 阅读(548) 评论(2) 推荐(1)
摘要:1、Block 本质上是一个struct结构体,在这个结构体中,最重要的成员是一个函数(当然除函数外还有其他重要的成员)。 2、在开始解析Block之前,首先来回顾一下Block的格式。Block相关的格式有2个: (1)、Block对象的格式; (2)、Block变量的格式; 3、对于Block对 阅读全文
posted @ 2016-09-16 00:49 杨淳引 阅读(221) 评论(0) 推荐(0)
摘要:49、在上文5(1)中提到:当NSObject对象的retainCount减为0之后,就不要再去打印它的retainCount了,有可能导致crash。 为了验证这个说法,可以通过初始化一个对象并释放它,然后多次打印这个对象的retainCount来测试。 测试结果有很多种情况,取3种情况展示如下: 阅读全文
posted @ 2016-08-18 16:04 杨淳引 阅读(227) 评论(0) 推荐(0)
摘要:41、在讨论property和内存管理相关的内容前,先回顾一下什么是property: (1)、首先,如果一个类没有定义property,能否访问它的实例变量?使用以下代码来验证一下。 建立一个类ShYBook,类内只有一个实例变量pageCount,如下: 使用“->”运算符来访问到它的实例变量, 阅读全文
posted @ 2016-08-18 15:57 杨淳引 阅读(197) 评论(0) 推荐(0)
摘要:30、有时候你可能需要用到一些Core Foundation对象(比如CFArrayRef或者CFMutableDictionaryRef),对于这些对象,编译器是不会自动管理它们的生命周期的,你需要使用CFRetain或CFRelease之类的方法来管理它们的持有情况(ownership)。 如果 阅读全文
posted @ 2016-08-18 15:00 杨淳引 阅读(322) 评论(0) 推荐(0)
摘要:6、ARC仍然遵循MRC的内存管理方式,4个基本规则在ARC下仍然是有效的,区别只在于:MRC模式下需要手动键入retain、release等方法来遵循这些规则,ARC环境下则是编译器自动在适当位置插入retain、release等方法去遵循这些管理规则,你不再需要去调用retain、release 阅读全文
posted @ 2016-08-18 14:43 杨淳引 阅读(182) 评论(0) 推荐(0)
摘要:1、内存管理有4个基本规则,这些规则不只是在MRC模式下有效,在ARC模式下也是同样有效的。区别只在于在MRC模式下要手动遵循这些规则,在ARC模式下编译器会自动处理。这4个基本规则如下: (1)、自己会持有自己生成的对象(You own any object you create): 使用“all 阅读全文
posted @ 2016-08-18 14:15 杨淳引 阅读(164) 评论(0) 推荐(0)
摘要:1、最近在重读当年刚开始学习多线程时的笔记,发觉其中有一些地方还是比较容易模糊,于是整理这篇笔记记录一下。 执行方式和队列 2、队列用来存放管理要执行的任务,它分为并发队列(Concurrent Dispatch Queue)和串行队列(Serial Dispatch Queue): 并发队列:队列 阅读全文
posted @ 2016-07-10 20:26 杨淳引 阅读(248) 评论(0) 推荐(0)
摘要:关联对象 14、使用Category对类进行拓展的时候,只能添加方法,而不适合添加属性(可以添加属性,也可以正常使用get方法和set方法,只是不会自动生成以下划线开头命名的成员变量)。 可以通过关联对象(Associated Objects)来在Category里添加一个关联对象,然后将这个对象当 阅读全文
posted @ 2016-07-07 10:52 杨淳引 阅读(138) 评论(0) 推荐(0)
摘要:消息发送(Messaging) 8、以上便是runtime相关的一些数据结构,接下来我们回看一开始的疑问: objc_msgSend()函数在执行的过程中是如何找到对应的类,找到对应的方法实现的呢? 这就是消息发送(messaging)的处理过程了: (1)、对于上文的Class的数据结构的描述,官 阅读全文
posted @ 2016-07-06 22:28 杨淳引 阅读(191) 评论(0) 推荐(0)
摘要:基本简介 1、根据官方文档,OC有一个特性:它会尽可能把一些决定从编译时和链接时推迟到运行时才处理,所以这门语言需要的就不只是一个编译器,它还需要一个runtime系统来处理那些已经被编译过的代码。 2、runtime有两种:legacy runtime和modern runtime,区别在于: ( 阅读全文
posted @ 2016-07-06 17:14 杨淳引 阅读(168) 评论(0) 推荐(0)
摘要:1、什么是Run Loop? (1)、Run Loop是线程的一项基础配备,它的主要作用是来让某一条线程在有任务的时候工作、没有任务的时候休眠。 (2)、线程和 Run Loop 之间的关系是一一对应的,但是并不是说新开一条线程就会自动生成这条线程对应的Run Loop,每一条线程里的Run Loo 阅读全文
posted @ 2016-05-06 14:46 杨淳引 阅读(335) 评论(0) 推荐(0)
摘要:EXC_BAD_ACCESS算是一个比较常见的错误,大部分情况下,它出现在某个对象还未初始化或已被释放后,还去试图访问这个对象的时候,即是在出现悬挂指针的时候(当然也有非悬挂指针导致的EXC_BAD_ACCESS)。在MRC机制下,EXC_BAD_ACCESS相对会出现得比较多,毕竟手动管理引用计数 阅读全文
posted @ 2016-03-29 20:15 杨淳引 阅读(372) 评论(0) 推荐(0)
摘要:最近准备做一个随手笔记类的app给自己用,考虑到从未使用过Core Data,就决定用Core Data来做数据存储。在网上参考了一些Core Data的资料后,用一天的时间写了这个demo,主要测试了增删改查,以及排序和分页这些基本功能。 demo的代码可以在GitHub上下载: https:// 阅读全文
posted @ 2016-02-04 15:18 杨淳引 阅读(302) 评论(0) 推荐(0)
摘要:UIView的autoresizingMask属性,是用在当一个UIView实例的父控件的尺寸发生变化时,来自动调整UIView实例在父控件中的位置与尺寸的。autoresizingMask属性是一个枚举值,它的枚举成员如下: 它通过使UIView的上、下、左、右、宽度或高度自动变化来调整。下... 阅读全文
posted @ 2015-07-30 10:58 杨淳引 阅读(984) 评论(0) 推荐(0)
摘要:在使用UIButton时,有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸。在默认情况下,按钮内部的imageView和titleLabel的显示效果是图片在左文字在右,然后两者紧挨在一起构成组合居中显示。如下图: 我们可以使用setImageEdgeInsets:... 阅读全文
posted @ 2015-07-27 16:20 杨淳引 阅读(579) 评论(0) 推荐(0)