一个block的面试题(刀哥)
2015-07-24 17:37
549 查看
块代码可以当作参数,也可以当作返回值
问
-以下代码在ARC中有问题吗?=》没有问题
-在MRC中有问题吗?存在内存隐患,i和b都是局部变量,出了作用域就会被释放
解决问题:
-返回前使用 Block_copy
-使用后,使用 Block_release
网上错误答案 return [b copy];
*********
Product - Analyze (静态分析)
从代码结构上分析是否存在缺陷!本身并不会运行程序!并不能够检测到真正的内存泄漏!
但是:只要是静态分析工具发现的问题,通常都是需要提升的代码!
静态分析工具,是MRC开发时的利器!提前发现内存隐患!
另外,在ARC开发时,如果程序要上架之前,建议使用静态分析工具检测一下,通常可以发现一些不注意的警告,有助于提升代码质量!尤其在使用到C语言框架的代码!
typedef void(^eBlock)();
eBlock myBlock() {
int i = 10;
eBlock b = ^ {
NSLog(@"hello %d", i);
};
//
利用Block_copy将block以及内部的变量拷贝到堆中
return
Block_copy(b);
}
int main(int argc,
const char * argv[]) {
@autoreleasepool {
eBlock bb = myBlock();
bb();
//
释放堆中block
Block_release(bb);
}
return 0;
}
问
-以下代码在ARC中有问题吗?=》没有问题
-在MRC中有问题吗?存在内存隐患,i和b都是局部变量,出了作用域就会被释放
问
-以下代码在ARC中有问题吗?=》没有问题
-在MRC中有问题吗?存在内存隐患,i和b都是局部变量,出了作用域就会被释放
解决问题:
-返回前使用 Block_copy
-使用后,使用 Block_release
网上错误答案 return [b copy];
*********
Product - Analyze (静态分析)
从代码结构上分析是否存在缺陷!本身并不会运行程序!并不能够检测到真正的内存泄漏!
但是:只要是静态分析工具发现的问题,通常都是需要提升的代码!
静态分析工具,是MRC开发时的利器!提前发现内存隐患!
另外,在ARC开发时,如果程序要上架之前,建议使用静态分析工具检测一下,通常可以发现一些不注意的警告,有助于提升代码质量!尤其在使用到C语言框架的代码!
typedef void(^eBlock)();
eBlock myBlock() {
int i = 10;
eBlock b = ^ {
NSLog(@"hello %d", i);
};
//
利用Block_copy将block以及内部的变量拷贝到堆中
return
Block_copy(b);
}
int main(int argc,
const char * argv[]) {
@autoreleasepool {
eBlock bb = myBlock();
bb();
//
释放堆中block
Block_release(bb);
}
return 0;
}
问
-以下代码在ARC中有问题吗?=》没有问题
-在MRC中有问题吗?存在内存隐患,i和b都是局部变量,出了作用域就会被释放
相关文章推荐
- 一个关于if else容易迷惑的问题
- 一道sql面试题附答案
- C# 超高面试题收集整理
- 人人网javascript面试题 可以提前实现下
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- 据说是雅虎的一份PHP面试题附答案
- php牛逼的面试题分享
- 一套比较完整的javascript面试题(部分答案)
- 小米公司JavaScript面试题
- 超级全面的PHP面试题整理集合第1/2页
- 5个实用的shell脚本面试题和答案
- PHP经典面试题集锦
- 8个PHP数组面试题
- PHP中提问频率最高的11个面试题和答案
- 用PHP解决的一个栈的面试题
- 几道坑人的PHP面试题 试试看看你会不会也中招
- 5个JavaScript经典面试题
- Java高级面试题小结
- 探讨Java中最常见的十道面试题(超经典)
- 15个高级Java多线程面试题及回答