ios黑马程序员--ARC
强指针:默认情况下所有的指针都
是强指针型(strong) 在Arc当中
,一个对象只要没有强指针引用,
那么它就会被系统回收
弱指针:弱指针不影响对象的回收
在Arc当中,所有的跟手动管理内存
相关的方法都不能调用比如说
dealloc不能重写父类 了(不能
super dealloc)
//__weak定义一个弱指针
__weak Person * p2 = p//弱指针
不影响对象
//强指针引用使用OC对象类型,
@property (nonatomic,strong)
我们用别人的项目有可能用的是非
arc的项目
-fno-objc-arc
-f-objc-arc
第三方框架:就是别人写的项目,
我们要用,如果他是非arc机制,给
编译器加一个参数-fno-objc-arc就
是告诉编译器这个文件就是非Arc机
制的,这样就不会报错了,并且非
arc手动内存管理的方法都能够正常
调用 了,在非arc项目中引入 arc机
制的文件,给编译器加一个参数 -
f-bojc-arc,就是告诉编译器这个文
件是arc机制的
edit->refactor-convert to
arc循环引用问题
arc机制中如果出现了循环引用问题
, 只需要把其中引用一方变成,
weak弱指针既可解决问题
block类型
int bool char float double
NSObject * id sel
他们的共同特点就是能够定义成变
量
1.int a = 0;
BOOL b = YES;
2.当做函数,和方法的参数的传递
(void) test(int) a
block:是oc中比较特殊的数据类型
,它用来封装一段代码,并且可以
把这段代码当做参数传递
1.通过{}来封装代码
1.void test():返回值为空,并且没
有参数{}
^{};
2.int test();有返回值,还有一个参
数
^{return 10;}
3.int test(int a);有返回值,还有一
个参数
^(int a){return a + 1}
4.int test(int a,int b)有返回值,有
多个参数
1.定义一个返回值为空,并且没有
参数的block变量
void (^myblock)() = ^{};
2.定义一个有返回值的,并且没有
参数的block变量
int (^myblock)() = ^{return
10;};
3.定义一个有返回值,并且有一个
参数的block变量
int (^myblock)(int a) = ^(int
a){return a + 1};
4.定义一个有返回值,并且有多个
参数的block变量
int (^myblock) (int a,int b) =
^(int a,int b){return a + b}
block好处就是,我定义block的人
本身可以不关心
//block内部算法的实现
//谁调用有block参数的方法,谁就
给我实现block内部算法
协议
协议就是用来声明方法
@protocol Myprotocol
- (void)test;
@end
在.m中实现协议中的方法
@required表示以下方法必须实现
- (void) test1;
@optional 表示可选实现
- (void)test2;
可选的就不会在遵守协议的那个类
里面显示
但是,required就会提示你必须实
现
协议本身他可以遵循其他的协议
协议可以遵循多个
基协议
协议就是用来声明方法的
@protocol Myprotocol
<NSObject>
内部声明方法
@end
协议内方法的约束
@required必须实现的方法
@optional 选择实现
默认的方法就是 必须实现的
让某个类遵循协议只需要在类继承
后面 <协议名字>
类可以遵循多个协议<协议名,协议
名,协议名>
协议本身也可以遵循其他协议<协议
名字>
协议当中不可以声明成员变量
子类继承了父类,同样也会继承父
类遵循的协议
NSObject * obj = [[NSObject]
init];
id obj2= [[NSObject alloc] init];
//定义OC对象变量时,可以给他加
一个协议约束
Person<Myprotocol> *p =
[[Person alloc] init];
@property (nonatomic,strong)
Car<Myprotocol2> * car;
//如果你要限定某个对象,一定要实
现某个协议,那么我们一般用
id<Myprotocol2>obj 去定义
@property (nonatomic,strong)id
<Myprotocol2> obj;
//与@class功能一样,就是告诉类
,MyProtocol是一个协议
@protocol MyProtocol;
把协议声明到 一个类的.h文件中,
其他类继承之外,没办法去遵循这
个协议了
单独把协议定义成一个.h,任意类
都可以遵循这个协议,
本文出自 “言十年” 博客,请务必保留此出处http://yanshinian.blog.51cto.com/8275527/1564567
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。