- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 protocol简单使用
可以声明一大堆方法(不能生命成员变量) 只要某个类遵循了这个协议,就相当于拥有了这个协议中的所有方法声明 只要父类遵循了某个协议,就相当于子类也遵守了
2016-05-30 23:00:04 301
原创 typedef block
typedef int (*sump) (int,int);sump p = sum; sump p2 = sum;定义了一个block
2016-05-30 22:18:48 215
原创 第一个 block 的进化
{ NSLog(@">>>>>>");}这是个代码块^{ NSLog(@">>>>>>");};加上尖号,加上 分号 生命这是个 block 里面保存了一段代码void (^myblock)() = ^{ NSLog(@">>>>>>");};声明一个blockmyblock();调用 block
2016-05-18 23:15:26 198
原创 单个文件转换非ARC
1、项目上单击2、右侧 targets -> build Phases -> compile Sources 里面有编译的 .m 文件3、文件上双击,或者回车 填入 -fno-objc-arc 4、想要某个文件是 ORC 填入 -f-obj-arc
2016-05-18 22:49:09 281
原创 ARC和非ARC区别
ARC 是编译器特性看到 @property (retain), 自动在 dealloc 里面添加相关属性的 release ,看到 你在main 方法里面调用 alloc ,就在后面自动给你添加 release注意不是垃圾回收,垃圾回收是运行时特性
2016-05-17 23:12:31 869
原创 autorelease 的封装
由于代码Person *p = [[[Person alloc]init]autorelease];太长,所以可以用类方法对他进行封装+ (id)person{ return [[[Person alloc]init]autorelease];}这样可以快速返回一个 autorelease 的对象
2016-05-17 22:23:36 192
原创 autorelease
自动释放手动内存管理的时候由于每次 alloc 以后都要调用 release 方法,为了简化管理,可以使用自动释放池使用方法是Person *p = [[[Person alloc]init]autorelease]这句话的意思是把 Person 对象放到自动释放池中,当自动释放池销毁的时候,会把自动释放池中的对象统一进行一次 release如何创建自动释放池 @autorelease{}大括号开
2016-05-17 20:46:50 177
原创 @class
@class 的作用:仅仅告诉编译器这是一个类开发中引用类的规范 1、在 .h 文件中用 @class 来声明类 2、在.m 文件中用 #import 来包含类的所用东西
2016-05-16 23:14:54 182
原创 @property 的属性
OC的 @property 语法可以自动帮助生成 成员变量,get 方法,和set 方法,但是 @property 还可以有一些属性可以对生成的方法进行精细化控制。 这些精细化控制主要分几类:1、跟set 方法内存管理相关的 * assign : 默认的,直接生成 set 方法 (适用于非 OC 对象) * retain : release 旧值,retain 新值,(适用于 OC 对象) *
2016-05-15 23:36:35 218
原创 自动生成 get set
@property 会自动生成 get 方法, set 方法 和 _ 成员变量,但是你要是自己实现了 get 方法,set 方法,@property 就不会生成 get 方法 和 set 方法,要是自己实现了一个,系统还是会给生成你没有实现的那个
2016-05-15 22:11:20 920
原创 内存管理原则
有 alloc 必须有 releaseset 方法规范 基本数据类型,直接赋值 - (void) setAge:(int)age { _age = age; }OC 对象类型- (void)setCar:(Car *)car{ if(car != _car) { [_car release]; _car = [car retain
2016-05-15 12:54:50 217
原创 引用计数器
alloc new copy 以后新创建的对象的引用计数器是1引用计数器 +1 调用 retain 应用计数器 -1 调用 releaseretainCount 方法 返回当前的引用计数器当引用计数器为 0 的时候对象会被销毁,当一个对象被销毁的时候,系统会自动向对象发送一条 dealloc 消息,遗言,让他释放对象用的
2016-05-11 22:45:48 290
原创 SEL
OC 中方法会被封装成 SEL 对象,当我们调用一个方法的时候,其实会在实例对象中把要调用的方法封装成 SEL 对象,然后通过 isa 指针找到 类对象的方法列表,调用对应的方法SEL 类型的定义 typedef struct objc_selector *SEL
2016-05-10 21:38:13 241
原创 description 方法
我们打印一个类的时候通常是使用 %@ ,但是 NSString 对象会把字符串的值打印出来,其他的对象只会打印出来 <类名:0X99898989> 类名:地址,这是因为 NSString 重写了description 方法。NSObject 有两个 description 方法,一个是 -description 一个是 +description ,当我们重写了 -description 的时候,在调
2016-05-09 23:40:17 413
原创 类的初始化过程
类的初始化过程中有两个比较重要的方法 + (void)load +(void)initialize 这两个方法是自动调用的load 方法在程序启动的时候的每个类的 load 方法都会被调用一次,注意是每个类的 load 方法,不是对象的,程序启动的时候initialize 方法在类被初始化的时候会调用一次,注意初始化,调用顺序是先调用 父类的,再调用子类的
2016-05-08 18:23:58 213
原创 OC 类对象
OC 中类也是一种对象,叫 Class 对象类对象的作用,可以用类对象直接调用类方法 获取类对象,一般直接调用 类的 class 方法就可以 Class c = [Animal class]; // Class 不用加 * 内部已经自动加 * [c test]; // test 是类方法,就是以 + 开头的还可以通过 Class 对象创建对象 Class c = [Animal
2016-05-08 17:55:45 238
原创 OC 分类注意事项
分类会覆盖原来类中已经实现的方法分类可以访问原来类中的成员变量,但是不能添加成员变量如果两个分类中都实现了某个方法,执行哪个方法和分类的编译顺序有关,编译顺利那里看 项目名称 -> build phased -> compile sources查看编译顺序的时候就能看出来,.h 文件是不被编译的,就是被别人 import 的
2016-05-07 10:57:21 176
原创 OC 构造方法
重写父类 init 方法,创建对象的时候尽量是用 alloc 和 init方法- (id)init{ self = [super init]; if(self != nil) { _age = 10; } return self;}精简写法- (id)init{ if(self = [super init]) {
2016-05-03 23:18:24 149
原创 OC id 类型
OC 中有一个万能的指针是可以执行任何对象,id 小写的例如:id p = [Person new];注意这个 id 指针是没有 * 号的
2016-05-01 16:01:21 269
原创 @property @synthesize
Xcode 中没有自动生成 set get 方法的快捷方式,OC 中提供了标签来进行 成员变量 get set 方法的声明和实现.h 文件声明{ int _age;}@property age;// 自动生成 age 属性的get方法声明 和 set 方法声明.m 文件实现@synthesize age = _age;// 前面一个age 后面一个_age 前面的 age 是生成@prop
2016-05-01 09:40:51 176
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人