摘要:前期准备 1 - 本篇共用的 Person 文件 内存寻址 1 - 以下代码是否会编译成功,如果编译成功会输出什么 ? 编译可以通过:我们知道 OC 方法默认自带两个参数 self、_cmd, [obj print] 其实是给 obj 发送 print 消息;也就是说实例对象调用方法是通过 isa
阅读全文
摘要:load | initialize 1 - 验证父类、当前类、子类、分类中 load/initialize 两方法的执行状况。继承关系如是 Student -> Person | Animal -> NSObject,我们在每个类中重写 load/initialize 两方法 ① load 方法 /
阅读全文
摘要:OC 对象 1 - OC 中的对象主要可以分为三种 ① instance 对象 (实例对象) ② class 对象 (类对象) ③ meta-class 对象(元类对象) 实例对象 1 - 实例对象是通过类 alloc 出来的对象,每次 alloc 都会产生出一个新的实例对象,占据不同的内存。如下面
阅读全文
摘要:NSPredicate 1 - NSPredicate 主要用来指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。谓词是指在计算机中表示计算真假值的函数,原理和用法都类似于 SQL 查询中的 where,作用相当于数据库的过滤取。主要用于从集合中分拣出
阅读全文
摘要:全局变量 | 全局静态变量(也叫做静态全局变量) 1 - 若程序由一个源文件构成时,全局变量与全局静态变量没有区别;若程序由多个源文件构成时,则全局变量与全局静态变量区别如下 ① 全局静态变量是由定义该变量的源文件所独享,就是说全局静态变量对组成该程序的其他源文件是无效的。不必担心和其他源文件使用相
阅读全文
摘要:MRC 环境 1 - 基本型变量 ① block 内部引用基本型局部变量:该变量在 block 中只读(block 定义时截获了变量的值)。变量在其内部作为常量使用,即使变量的值在 block 外部改变,也不会影响它在 block 内部的值 1 int base = 100; 2 long (^su
阅读全文
摘要:copy | retain | release 1 - block 在内存中的存储状况分为 NSGlobalBlock、NSStackBlock 和 NSMallocBlock 三种 2 - 对于 block 而言,我们对 block 不管是 retain、copy、release 都不会改变其引用
阅读全文
摘要:block | 函数 1 - 相同点 ① 都可以保存代码 ② 参数、返回值均可有可无 ③ 调用方式一样 block 本质上是匿名函数,同样也是 OC对象。在 iOS 4.0 之后的类都添加了 block 支持 如何使用 block 1 - 定义一个 block 1 // 标准格式 2 int (^m
阅读全文
摘要:前言 1 -对 weak 和 strong 描述最多的就是:它们由 ARC 引入,weak 相当于 MRC 中的 assign,但 weak 是用于修饰对象,两者都不会造成引用计数加 1;strong 相当于 MRC 中规定的 retain,它会造成引用计数加 1 2 - strong 指针能够保持
阅读全文
摘要:copy 实现原理 1 - copy 修饰属性时,其 setter/getter 方法内部实现原理同 retain 类似 // - Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property(no
阅读全文
摘要:autorelease 1 - 工作原理 ① 当对一个对象发送 autorelease 消息,就会把这个对象扔到离它最近的自动释放池中;当自动释放池被释放的时候,就会把池中管理的 autorelease 对象逐一拿出来发送一次 release 消息 ② autoreleasepool 管理的对象是以
阅读全文
摘要:字符串 1 - 在使用 NSString、NSDate...等轻量数据类型时,它们的引用计数有时会受到 Tagged Pointer 影响,但这并不会影响内存管理原则 1 // 常量区字符串无须管理内存,于 retain/release 操作无关 2 NSString *strA = @"妇好";
阅读全文
摘要:retain 1 - Xcode 勾选僵尸模式用来检测野指针。下面一步步验证 retain 的内部实现 // - Student.h 1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject{ 4 5 NSString
阅读全文
摘要:内存管理 1 - MRC(Manual Reference Count)人工引用计数:内存的开辟和释放由程序代码进行控制;ARC(Automatic Reference Count)自动引用计数。它并不是自动管理内存,而是编译器帮助程序员默认加了释放代码 2 - 在 C 语言中使用 malloc 和
阅读全文
摘要:for 循环 1 - 如果遍历字典、数组或者是集合,for 循环是最简单、也是用的比较多的方式 1 // for 循环 2 -(void)iteratorWithFor 3 { 4 // 处理数组 5 NSArray *arrayM = @[@"1",@"2",@"3",@"4"]; 6 NSInt
阅读全文
摘要:前言 1 - 动态数据类型的特点 ① 在编译的时编译器并不知道变量的真实类型,只有在运行时才知道它的真实类型 ② 在编译阶段,即使访问了不属于动态类型数据的属性和方法,编译器也不会报错 id 1 - 它是一种动态数据类型,也是万能指针,能够指向或操作任何对象 1 Typedef struct obj
阅读全文
摘要:语法糖 1 - 语法糖也译为糖衣语法、笑笑语法,指计算机语言中添加的某种语法。这种语法对语言的功能并没有影响,但是更方便程序员使用 注:在 OC 中的语法糖创建的对象是通过便利构造的,且不可变 2 - 代码示例:如何使用语法糖 1 // NSNumber 2 NSNumber *value01; 3
阅读全文
摘要:NSNumber 1 - 在 OC 中有 int 型,为什么还要使用数字对象 NSNumber ?这是因为很多类的使用都要求是对象型,比如数组、字典...... 我们使用 NSNumber 来创建和初始化不同类型的数字对象!常用 API 如下 // 基本型转为对象型 + (NSNumber *)nu
阅读全文
摘要:NSDictionary 1 - 字典的特性:① 只能存储对象;② 无序存储;③ key 唯一性 2 - 代码示例 ① 如何使用 NSDictionary 1 // 方式一:创建 2 NSDictionary *dic01 = [[NSDictionary alloc] initWithObject
阅读全文
摘要:NSDate | NSDateFormatter 1 - NSDate 是 Cocoa 中用于处理日期和时间的基础类,封装了某一给定的时刻(含日期、时间、时区)。NSTimeInterval 用来表⽰以秒为单位的时间间隔,可以使用 -initWithTimeIntervalSinceNow: 方法
阅读全文