Effective objective - c
啦啦拉德玛西亚
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Effetive Objective - C 1.Objective 2.类的头文件中尽量少引入其他类的头文件
Foundation.h 里面就是一堆的#import 引入Foundation.h就是引入了所有Foundation库的所有头文件 如果在头文件中不需要这个类的具体实现细节(不会用到它提供的方法等信息)则用前值声明就可以 前置声明就是@class A 他告诉编译器A是一个类 但是编译器并不会知道这个类的详细信息 减少头文件引入其他类的头文件 有助于减少编译依赖 降低类与原创 2016-07-14 16:14:10 · 426 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 24 - 28 分类
1.可用于分散代码 2.利用分类添加方法: 其实就是在运行期动态的想类中添加方法 可能会有同名方法的情况导致方法的覆盖 导致bug的产生 可以将分类的方法加上前缀降低覆盖的几率 分类无法为原类动态的添加实例变量 所以不要再分类中使用属性 在扩展中可以使用 如果想在分类中使用属性可以利用关联对象来实现 要将所有的数据封装在主接口中 这里是唯一能定义实例变量的地原创 2016-08-05 18:12:43 · 242 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 23.委托与数据源协议进行对象间通信
委托:A要做something 但是自己不想做 于是让B去做 但是怎么帮正B一定可以做something??? 这就要求B一定遵从某个协议 而遵从这个协议的对象都可以做something A { property (assign,..) id delegate;delegate就是B } 协议 { dosometheing } B { fu原创 2016-08-05 17:28:51 · 211 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 22.理解NSCopying协议
如果想让自己的类支持拷贝操作那么要实现NSCopying协议 的 copywithzone : zone zone 是内存区 以前的存储是分区的现在只有一个默认区(这个参数可忽略) NSObject 的copy方法只是对copywithzone的封装 使用拷贝的时候要考虑是否使用深拷贝/浅拷贝 系统库中的大多数都是浅拷贝原创 2016-08-05 14:01:42 · 241 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 19.理解错误模型
抛出异常arc并不会自动清理内存 抛出异常容易导致内存泄漏发生 只有在发生严重的错误时抛出异常终止程序的运行 如果发生的并不是严重错误 那么返回0/nil 或NSError NSError 可以更好的封装错误信息原创 2016-08-05 11:37:45 · 273 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 概述
OC 语言是消息机构 其运行时所执行的代码由运行环境决定 在运行时查找执行的代码(无论是否是虚函数) C++是消息结构 调用的代码由编译器在编译阶段决定 如果函数是多态的则会在运行时查找虚表 OC 中所有对象都是存储在堆中的 他有自己的内存管理框架 利用引用计数控制对象的内存分配和释放原创 2016-07-14 14:37:13 · 407 阅读 · 0 评论 -
NSString 常用方法
NSString *str1 = @"BeiJing"; NSString *str2 = @"beijing"; //全部转为大写 NSLog(@"%@",[str1 uppercaseString]); //全部转为小写 NSLog(@"%@",[str1 lowercaseString]);转载 2016-08-01 11:26:49 · 318 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 14 类对象
由类对象实例化而来的对象内存的首位置为 isa指针指向类对象 对象 : isa指针 实例变量 类对象: 指向父类的指针 指向类方法列表的指针 指向方法的指针 指向示例变量列表的指针 。。。。 对象是存放实例变量值的地方 类对象中只是存放了实原创 2016-07-29 15:58:22 · 361 阅读 · 0 评论 -
强制获取并修改私有变量,强制增加及修改私有方法等
OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法。利用runtime机制让我们可以在程序运行时动态修改类、对象中的所有属性、方法,就算是私有方法以及私有属性都是可以动态修改的。本文旨在对runtime的部分特性小试牛刀,更多更全的方法可以参考系统API文件,demo例子可以参见优快云的runtime高级编程系列文章。 我们出发吧! 先看一个非常平常的转载 2016-07-29 15:34:45 · 1058 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 消息转发
原创 2016-07-29 15:34:08 · 428 阅读 · 0 评论 -
选择器
文章来源:http://blog.youkuaiyun.com/fengsh998/article/details/8612969 SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取. 它转载 2016-07-28 18:26:05 · 295 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 9
类簇 : 可以把多个类的复杂实现 隐藏到一个类的借口之下 对象关联 : objc_setAssociatedObject ( 对象 键 值 内存语义 关联某对象的值 到对象 objc_getAssociatedObject 获得某对象的关联的键的值 objc_removeAssociatedObject 移除某对象上所有关联的对象 少用对象关联 bu原创 2016-07-28 18:23:30 · 249 阅读 · 0 评论 -
Effetive Objective - C 1.Objective8.;理解对象等同性
OC 的对象都是指针类型 不能直接 p1 == p2 判断两个对象是够相等 NSObject 协议有两个关键方法判断等同性: -isEqual -(nsuinteger)hash 重写这两个方法是要遵守约定:对象相等 -> 则 hash值一定相等 hash相等 对象不一定相等 当对象存放到 hash结构的集合中时 集合会根据对象的hash值查找对象要 放原创 2016-07-15 11:29:45 · 618 阅读 · 0 评论 -
self 和 super
关于 self 和 super 在oc 中 的疑惑 与 分析 这个问题貌似很初级,但很容易让人忽略,me too 。直到在一次面试时被问到,稀里糊涂的回答了下。实在惭愧, 面试一定都是很注重 基础的,不管高级还是初级。 虽然基础好跟基础不好都可以写 代码,网上那么多资料。 区分高低也就是研究的深度和广度。 开始我们的问题: @implementation转载 2016-07-14 19:06:12 · 276 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 7.在对象内部尽量直接访问实例变量
直接访问和属性访问区别: 1.属性访问其实本质是调用存取方法 存取方法内对实例变量进行赋值或者取值 直接访问会更加快 2.直接访问不会触发属性的内存语义特性 3.直接访问不会触发键值观察 4.利用属性访问 方便断点 监控实例变量的存取时机 由于以上几点比较好的方案是: 设置实例变量时用 属性来设置(出去几种特殊情况) 访问实例变量是直接访问 几种特殊情况:原创 2016-07-14 18:50:06 · 434 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 6.属性
C++ 成员变量存储: 在编译时确定了成员变量内存地址相对于对象的内存地址的偏移量 利用这个偏移量找到成员变量的值 OC 实例变量的存储:实例变量是一个特殊的变量 他存储了偏移量 交由类对象保管 在运行时动态查找偏移量 故可以动态的添加实例变量 @property xx A; 等价于 定义了一个名字为_a的实例变量(默认) + setA的存方法 + A 的取方法 @sye原创 2016-07-14 17:43:59 · 256 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 3.多用字面量语法
NSString* str = @"asdf" NSNumber* num = @1 NSNumber* floatNum= @1.0 NSNumber* Num= @(X * Y) NSArray* array = @[@1,@2] xx = array[1] //取值 使用字面量创建数组是要注意 如果对象中有空值程序会抛出异常 而不适用字面量则原创 2016-07-14 16:44:56 · 278 阅读 · 0 评论 -
Effetive Objective - C 1.Objective 29 - 35 内存管理
一,引用计数 属性存取方法的内存管理: 先保留新值 后释放旧值 旧值 = 新值 顺序是不能变得 如果新旧两值为同一个对象的话 那么先释放旧址 可能会导致对象内存的永久回收 autorelease:延迟对象的释放 一般在函数返回的局部变量时使用 确保对象的引用计数大于一 并且不用调用者去管理对象的释放 对象release后要赋值为nil原创 2016-08-08 16:07:17 · 352 阅读 · 0 评论
分享