c语言arc函数带几个参数,ARC的使用简要总结

.h文件中:

1,@property (strong,nonatomic)中属性的定义主要是类对外的接口,将retain,copy等变为strong。

2,私有变量

.m文件中的类扩展定义的私有属性变量,即@interface class (){@property()nsarray *

array;}

现在直接在类实现中@implementation class{ nsarray *

array;}即可----附:此处仍然可以self.array来访问。

3,outlet

除了files owner(链接nib顶层对象用strong)之外,均用weak。

优势:unload中,不需要self.outlet=nil;了。

附:当接受到内存警告时,ViewCtl的mainView会unload,释放其所有subView。但是需要设置所有非outlet变量为nil。

4,strong=retain,weak(outlet多用),unsafe_unretained=assign(IOS4适用),copy=copy+strong,assign(原始类型BOOL,int,CGFloat等),readonly要+strong,iddelegate用weak,nonatomic,block用copy。

5,在.m文件中,移除所有的autorelease,retain,release调用。

诸如:self.XX=[[[mainVC

alloc]init]autorelease];现在改为:self.XX=[[mainVC alloc]init]即可。

6,dealloc{},移除所有release方法,【super

dealoc】;其他资源如定时器,CF对象时才需要之。CFRealse等。作用:1,移除监听;2,取消注册通知;3,将non-weak

delegate设置为nil;4,invalidate

timers。

7,@autoreleasepool用法:

if someArray很大

for(id obj in

someArray)

{

@autoreleasepool

{

//假如你创建了许多中间临时变量在此处

}

}

8,某个项目中若设置某个文件不使用arc,方法:在Build Phases -> Compile sources,选择需要的文件,在右边Compile Flags输入-fno-objc-arc

启用arc:-fobjc-arc

9,Blocks:主要在于blocks中的循环参照问题。

a,block在属性定义的时候,使用copy。

调用端如下:

MyObject *object = [[MyObject alloc] init]; object.str = @"hoge"; object.block = ^{NSLog(@"block:

str=%@", object.str); }; [object performBlock];

由上可知:object和block构成了循环参照,如图:

解决办法:

1,使用__block修饰---

使用__block关键字,让对象有读写权限,如果Block内的处理完毕就释放object。

__block MyObject *object = [[MyObject alloc] init]; object.str = @"hoge"; object.block= ^{ NSLog(@"block:

str=%@", object.str); object = nil; }; [object performBlock];

关键字的意思就是让block取消对object的强参照,以避免循环参照。但是,有一个问题就是,object的释放动作是在Block内部执

行,如果Block没有被执行的话,循环参照一直存在。比如上面的代码,如果第8行 [object performBlock];

没有执行的话,那么一直还是循环参照状态。

使用__weak关键字修饰

另一种方案就是让Block的参照变为弱参照。

MyObject *object = [[MyObject alloc] init]; object.str = @"hoge"; __weak MyObject*weakObject = object; object.block = ^{ NSLog(@"block:

str=%@", weakObject.str); };[object performBlock];

考虑到异步通信时Blocks的使用情况,weak变量weakObject有可能随时变为nil,所以类似于下面先变为strong变量,并检查是否为nil的处理方式应该更安全。

MyObject *object = [[MyObject alloc] init]; object.str = @"hoge"; __weak MyObject*weakObject = object; object.block = ^{ MyObject strongObject = weakObject; if(strongObject) { NSLog(@"block:

str=%@", strongObject.str); } }; [objectperformBlock];

总上,当我们使用Blocks时,也需要考虑Block中变量和实例的关系,不要引起不必要的循环参照问题。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下未细化:

手动下的情况:

1,凡用alloc/new/copy/mutableCopy,则生成对象并拥有其所有权;

2,retain-拥有对象所有权,release-释放对象所有权,d

你可能感兴趣的:(c语言arc函数带几个参数)