关于函数返回值作用域的一些思考
2014-10-28 09:55
274 查看
函数中的变量的作用域只能是在这个函数内,在arc环境内,例如,
view的作用域只能在这个函数内,所以按理说应该在函数结束后就会将view的内存计数减一,但是实际上并不是这样,如下测试代码:
输出的view的宽度是100,而不是0,假如函数结束时view的内存计数器立马减1,那么当执行完view = nil;后view的内存计数应该只有0了,无法输出view的宽度是100,这说明当结束这个函数时,view的计数并没有立刻就减1,而应该是把它放入了自动释放池,也就是非arc中的 return [view autorelease];这个只适用于函数内被返回的变量,对于不被返回的变量,因为它的作用域只在这个函数内,所以在arc环境下,当函数结束时,这个变量就回release一次,如下测试代码:
在method函数内有一个局部变量obj ,当函数结束时就回把它release一次,所以当ViewDidLoad中的obj设置为nil的时候就被立即释放了(NSLog被执行).
总结:在函数作用域结束时需要处理对象的引用计数,假如是不需要返回的对象,可以直接release,而假如是需要返回的对象,处理方法是autorelease,目的是稍微延迟它的释放时间用来传给外面的对象,而不是函数结束时就释放。
- (UIView * )method{ UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 40.0f)]; return view; }
view的作用域只能在这个函数内,所以按理说应该在函数结束后就会将view的内存计数减一,但是实际上并不是这样,如下测试代码:
- (void)viewDidLoad {
[super viewDidLoad];
UIView * view = [self method];
UIView * __weak view2 = view;
view = nil;
NSLog(@"%f",view2.bounds.size.width);
}
- (UIView * )method{ UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 40.0f)]; return view; }
输出的view的宽度是100,而不是0,假如函数结束时view的内存计数器立马减1,那么当执行完view = nil;后view的内存计数应该只有0了,无法输出view的宽度是100,这说明当结束这个函数时,view的计数并没有立刻就减1,而应该是把它放入了自动释放池,也就是非arc中的 return [view autorelease];这个只适用于函数内被返回的变量,对于不被返回的变量,因为它的作用域只在这个函数内,所以在arc环境下,当函数结束时,这个变量就回release一次,如下测试代码:
- (void)viewDidLoad { [super viewDidLoad]; NSObject *obj = [[NSObject alloc] init]; NSObject * __weak obj2 = obj; UIView * view = [self method:obj]; obj = nil; if (obj2 == nil) { NSLog(@"obj被释放了"); } } - (UIView * )method:(NSObject * __strong)obj{ UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 40.0f)]; return view; }
在method函数内有一个局部变量obj ,当函数结束时就回把它release一次,所以当ViewDidLoad中的obj设置为nil的时候就被立即释放了(NSLog被执行).
总结:在函数作用域结束时需要处理对象的引用计数,假如是不需要返回的对象,可以直接release,而假如是需要返回的对象,处理方法是autorelease,目的是稍微延迟它的释放时间用来传给外面的对象,而不是函数结束时就释放。
相关文章推荐
- 关于C#间接继承的一些思考:如何修改继承函数的返回值类型
- 关于寻路算法的一些思考(2):Heuristics 函数
- 关于屏蔽Android返回键的一些思考
- 关于函数返回值的一些理解
- 关于函数返回值的一些见解
- 关于寻路算法的一些思考(2):Heuristics 函数
- 关于函数返回值的设计的一些思考
- 关于C++函数思考2(C++函数返回引用和返回非引用的区别)
- 关于寻路算法的一些思考(2):Heuristics 函数
- 关于函数返回值的一些见解
- 关于函数返回值的设计的一些思考
- 关于函数调用中参数传递的一些思考
- 关于函数的返回值的一些困惑和解释
- [转帖] 关于sizeof()的一些思考
- 关于素质的一些思考
- 最近项目中一些关于代码编写管理的一些思考
- 关于开发环境的一些思考
- 关于程序的一些零碎思考
- 关于Blog现象的一些思考。
- 关于软件开发团队的一些思考