OC
Snip_
这个作者很懒,什么都没留下…
展开
-
Retain Count
Objective-C使用了一种叫做持有计数(Retain Count)的机制来管理内存中的对象。 在Objective-C中每个对象都对应着他们自己的持有计数(Retain Count),持有计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息时,持有计数数值会增加。相反,当你像一个对象发送release消息时,持有计转载 2015-04-06 21:17:24 · 483 阅读 · 0 评论 -
懒加载的一些理解
懒加载的理解1、设计一个HMMusicTool类,这个类有个属性musics 2、使用这个类,会涉及到这个类的这个musics属性 “懒加载模式”又叫“懒汉模式”是指当第一次使用到这个属性时才给这个属性对应的成员变量进行初始化,如果程序还没运行到这个地方就不进行相应的创建和初始化有利于节省资源提高性能。与之对应的还用一种模式叫做“饿汉模式”就是程序一启动就初始化相应的成员变量,不管当时有没有用到原创 2016-02-13 20:29:26 · 5147 阅读 · 0 评论 -
iOS创建JSON字符串
一、区分json字符串和json对象: 1、json字符串就是字符串 ,只不过字符串的内容格式是json格式的。 2、json对象是对象 ,是json格式的对象 。什么是json格式啊 就是 键值对, 键可以是字符串也可以数字 ,值可以是字符串 ,也是可以是数值,还可以是对象。二、当没有网络却需要调试从服务器返回的数据解析怎么办?使用假数据,创建一个与服务器返回的json格式相同的字符串,把它当原创 2016-06-12 12:04:17 · 6764 阅读 · 0 评论 -
MRC时代@property关键字retain的作用
在MRC时代: 写set方法和get方法时基本都一样,为了高效开发苹果引入@property功能,使用一句代码就可以生成:成员变量、set和get方法的声明及实现。 但是只使用@property Dog *dog;这样的代码的话,产生的set语句是没有进行内存管理的: 看set方法: 但是一旦使用关键字retain,那么@property语句生成的set方法会自动添加内存管理代码:原创 2016-03-14 14:16:43 · 690 阅读 · 0 评论 -
内存管理细节1
1、为何有时候给方法中的参数传递的是地址2、MRC环境,谨记苹果官方的内存管理规则! 像这种官方的快速创建对象方法,就不需要自己再去release,因为快速创建方法的内部已经用autorelease进行了内存管理。 3、集合的内存管理细节 4、set方法的内部实现 5、定义枚举时的注意事项 6、一个常见的警告信息原创 2016-01-13 08:22:53 · 246 阅读 · 0 评论 -
OC对象的表示
1、OC对象内存示意图 2、多对象内存示意图 3、僵尸对象会导致野指针错误 4、僵尸对象检测 勾选该选项之后,如果程序中出现了僵尸对象Xcode会立马报警,方便调试原创 2016-01-13 08:44:42 · 487 阅读 · 0 评论 -
分类到底能不能添加属性?
文/碧霄问鼎(简书作者)原文链接:http://www.jianshu.com/p/3cbab68fb856著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。“通过运行时,分类是可以在不添加成员变量的情况下添加属性的!”遇到一个问题,写了一个分类,但原先类的属性不够用。添加一个属性,调用的时候崩溃了,说是找不到getter、setter方法。查了下文原创 2016-03-12 12:15:24 · 1178 阅读 · 0 评论 -
instancetype与id对比
在MRC环境下,需要手动进行内存管理时,使用autorelease配合autoreleasepool可以快速创建对象。//先说最笨的办法@autoreleasepool{ Person *p = [[Person alloc] init] ; [p release];//未使用autorelease}或者@autoreleasepool{ Person *p = [[[P原创 2016-01-08 21:16:09 · 328 阅读 · 0 评论 -
@property属性和成员变量
@property(nonatomic,copy) NSString *title;1、声明property之后就会默认生成成员变量的指针符号_title,这部分工作是在编译期间添加的。还有默认生成set和get方法的声明及实现。因为自iOS6开始,声明属性可以省略@synthesize编译指令了,编译器会自动为对应属性添加“_属性名”的成员变量。但是如果你想改变这种默认行为,也可显式地调用@syn原创 2016-03-06 23:27:52 · 395 阅读 · 0 评论 -
桥接
涉及到两个框架:Foundation和Core Foundation原创 2016-02-14 10:55:28 · 243 阅读 · 0 评论 -
关键词static
关键词static原创 2016-02-13 21:12:25 · 265 阅读 · 0 评论 -
深复制与浅复制探究
OC中复制的特点: 1、什么是浅复制和深复制 不可变对象调用copy方法是不会产生新对象的,这种复制只是浅复制 总结:1、如何判断深复制?有新对象产生就是深复制。 2、为什么深复制会产生新对象,浅复制就不会产生新对象?为了保证复制的原则:源对象和副本对象不可互相影响,所以 ①不可变对象调用copy时应该生成的依然是不可变对象,两个完全相同的不原创 2016-01-12 16:10:23 · 295 阅读 · 0 评论 -
protocol与delegate
一、关于协议 1、protocol是一系列方法的声明,注意:只有声明! 2、protocol的用处:如果好几个类都用到了几个相同的方法的声明,则可以把这几个相同的方法声明写成一个协议,哪个类用到了只需要实现这个协议即可。 二、关于代理 代理的意思:B作为A的代理,当A出现某种情况时会让B去做某件事,所以代理涉及到至少两个对象(也有可能自己是自己的代理)。 如原创 2016-01-11 18:54:03 · 279 阅读 · 0 评论 -
#import和@class
1、#import的作用#import "Person.h" 的作用是将整个头文件copy一份到其他文件里替换这行代码(#import "Person.h"),这个copy操作是在编译器链接时进行的。如果这个头文件之后有所修改,那么再编译的时候编译器会再执行一次copy替换操作,所有包含这个头文件的文件(很可能不止一个)都会再copy并替换掉之前的,这会使得编译很慢。2、@class的作用原创 2016-01-08 15:52:19 · 436 阅读 · 0 评论 -
OC内存管理
OC内存管理一、基本原理(一)为什么要进行内存管理。由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。管理范围:任何继承NSObject的对象,对其他的基本数据类型无效。本质原因是因为对象和其他数据类型在系统中的存转载 2015-04-06 11:54:58 · 245 阅读 · 0 评论 -
OC中的浅拷贝和深拷贝
自己为了弄清楚这个问题引用了别人写的文章,都是转载挺多的几篇,但找不到具体出处,为了尊重原作者我先Mark一下。这个问题涉及到:对象与指针的定义、可变对象与不可变对象、数值型变量赋值与指针型变量赋值的区别、对象引用计数机制及其原理对象的拷贝分为浅拷贝和深拷贝,这与底层实现有关。浅拷贝就是只拷贝对象,但是属性不拷贝(不准确,要看包含的属性都有哪种数据类型。数值型的属性在赋值时是直接传原创 2015-11-05 17:25:26 · 575 阅读 · 0 评论 -
OC中关于对象的内存1
【转载学习】OC学习笔记之OC对象的内存管理一、为什么要做内存管理 相对于现在动不动就上T的硬盘外存来说,计算机的内存虽然也在提升在还是太小了,而现在的应用软件也十分吃内存,程序运行进程中如果不管理内存,如果有泄露,系统内存将会越用越小,对移动设备来说更是如此。苹果手机的内存只有那么大,如果应用程序不管理内存而占用了过多的内存,系统肯定是不允许的,引发的闪退给用户不好转载 2015-06-21 18:54:25 · 488 阅读 · 0 评论 -
ARC原理及强弱指针
一、Xcode使用ARC来对内存进行管理,并不是像JAVA一样的垃圾回收机制,ARC不负责回收内存,而是在代码合适的地方插入合适的内存管理代码(retain、release、autorelease)。 ARC中,判断对象是否该销毁靠的是“强指针”,而不是MRC中的引用计数器,默认的指针都是强指针。所以在ARC中要提前释放一个对象,只需要设置指向该对象的指针为空即可:p = nil;因为当没有强指针原创 2016-01-09 16:08:48 · 582 阅读 · 0 评论