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