IOS开发之block应用
非常长时间都是在学习各位大神的力作,并汲取了不少养料,在此一并谢过各位大神了。
当然了。好东西是要跟大家一起分享的,近期发现了几个很不错的个人网站,都是介绍IOS开发的。当中有唐巧、破船之长、池建强、王维等各位,当中不乏供职于腾讯和阿里这种IT巨头。希望大家也能从他们的博客中学习到一些技术之外的东西。
就不再啰嗦啦,附上地址:http://www.ityran.com/archives/4647
这几天在学习IOS7 CookBook。由于没有找到中文版。就硬着头皮啃原著吧。还真学到了不少东西,非常值得跟大家分享,今天先把block里边关于变量引用的部分写一下吧,都是自己的读书感悟。如有错误,恳请各位高人不吝赐教。
首先,block在我们平时编程过程中,使用的不多。起码我基本不用的\(^o^)/~
但在GCD多线程里。基本全是block的身影,所以多了解一下。在处理IOS7的多任务时,还是蛮有优点的。
1.声明方法
block的声明方法:返回值类型(^方法名)(变量类型,变量类型)(參数)
比如://返回值为字符串类型,带有一个整形变量的名称为intToString的blcok
NSString *(^intToString)(NSUInteger)=^(NSUInteger parma)
{
NSString *result=[NSString stringWithFormat:@"%lu",(unsigned long) parma];
return result;
};
使用过程中,这样调用就能够了:
NSString *result=intToString(10000);
NSLog(@"result:%@",result);
2.关于变量的调用
在IOS程序中。大致有三种变量,全局变量、block之外的局部变量和block内声明的局部变量。
block对在block内生命的变量是有绝对的read write权限的,可是对于全局变量和在block之外的局部变量就没有那么大的权限了。
对于全局变量而言。若要进行读写,仅仅有调用get set方法了
对于在block外部声明的局部变量,block是有读权限的。若要添加write权限,须要在变量前加入__block前缀。
代码的力量总是无穷无尽的,以下就来看一下详细是怎么实现的吧
- (void)simpleMethod
{
//若要在block内对外部声明的变量进行write操作,要加上__block前缀
//否则仅仅有read权限
__block NSUInteger outsideVariable=10; NSMutableArray *array=[[NSMutableArray alloc]initWithObjects:@"obj1",@"obj2", nil];
[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//对于block内声明的变量而已,具有read write权限
NSUInteger insideVarible=20;
outsideVariable=50;
NSLog(@"outSide variable=%lu",(unsigned long)outsideVariable); NSLog(@"inside variable=%lu",(unsigned long)insideVarible); //调用self
NSLog(@"self:%@",self); //使用.属性 需使用set get方法
self.stringParoperty=@"helloWorld";
NSLog(@"self.stringProperty:%@",self.stringParoperty); return NSOrderedSame;
}]; }
3.关于self的使用
在独立的block函数内。是不能直接调用self的,仅仅有通过參数传递的方式才干对self进行訪问
//不能在独立的block内使用self。必须以參数形式传递
//使用.属性时。须要set get方法进行读写设置
void (^incorrectBlockObject)(id)=^(id selfParam)
{
NSLog(@"self:%@",selfParam); [selfParam setStringParoperty:@"Block Object"];
NSLog(@"self.stringProperty:%@",[selfParam stringParoperty]);
};
4.block对会copy传递过来的參数,并不会随着所传递參数的值的改变,而改变原来的參数值,详细例如以下:
- (void)scopeTest
{
NSUInteger integerValue=10;
BlockWithNoparam myBlock=^{
NSLog(@"Integer value inside the block:%lu",(unsigned long)integerValue);
}; integerValue=20;
myBlock(); NSLog(@"Integer value inside the block:%lu",(unsigned long)integerValue);
}
在控制台,你会发现,输出的值是10和20 ,却不是改变变量后的20 和20.
要改变这一现象,跟前面提到过的一样,仅仅要在integerValue前加入__block 前缀就可以。刚兴趣的朋友能够试一下哦\(^o^)/~
关于这一部分的測试代码,我会放在下载频道,有须要的同学,能够直接下载。
http://download.csdn.net/detail/jidiao/7283035
IOS开发之block应用的更多相关文章
- iOS 开发之Block
iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1. 按钮事件 target action 机制. 它是将一 ...
- 李洪强iOS开发之Block和协议
李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任 ...
- iOS开发之Block
1.定义 (1) Block是OC中的一种数据类型,在iOS开发中被广泛使用 (2) ^是Block的特有标记 (3) Block的实现代码包含在{}之间 (4) 大多情况下,以内联inline函数的 ...
- ios开发之block的使用,及注意事项
转自:http://my.oschina.net/u/1432769/blog/390401 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于 ...
- iOS开发之block解析
1. block的本质是一个Objective-C的对象,为什么这么说? 在Objective-C中,runtime会在执行时依据对象的isa指针的指向,来度额定这个对象的类型,也能够觉得一个对象,它 ...
- iOS 开发之 GCD 不同场景使用
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- iOS 开发之 GCD 基础
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- iOS开发之MVVM在项目中的应用
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
随机推荐
- MSSQLServer知识点总结:DDL(create,alter,drop,declare)-未完整
一.开发环境 Window10 二.开发工具 SQLServer2012 三.数据库的操作 1.创建 (1)方式一:使用默认的配置信息 create database T_mydb2 (2)方式二:自 ...
- FCC 基础JavaScript 练习3
1.通过使用提供的变量参数:名词myNoun.形容词myAdjective.动词myVerb.副词myAdverb,来创建一个新的句子 result, function wordBlanks(myNo ...
- [Testing][API][soapUI] 測試API 的軟體工具紀錄
soapUI 測試API 的軟體工具紀錄 http://files.cnblogs.com/vincentmylee/soapUIScript%E9%9C%80%E8%A6%81%E8%B3%87%E ...
- key-value键值型数据库:Redis
key-value键值型数据库:Redis redis Redis是in-memory型(内存型)的键值数据库,数据在磁盘上是持久的,键类型是字符串,值类型是字符串.字符串集合(Set).sorted ...
- rem布局进入页面样式错乱解决
开发项目时候第一次遇到rem布局进入页面瞬间样式错乱问题: //该段js为rem布局应用 如10px = 0.1rem; (function(doc, win) { var docEl = doc.d ...
- Python-Day07-图形用户界面和游戏开发
Python-100Day-学习打卡Author: Seven_0507Date: 2019-05-22123 文章目录Python图形用户界面和游戏开发1. tkinter模块2. Pygame进行 ...
- 安卓app测试之启动时间和电量监控
一.启动时间监控 通过adb命令获取 adb shell am start -W /<packageName> /<activityName> 案例: adb shell am ...
- 梦想MxWeb3D协同设计平台 2018.10.12更新
SDK开发包下载地址: http://www.mxdraw.com/ndetail_10107.html 1. 全新的在线的三维协同设计平台,高效异步方式,基于JavaScript和WebGL技术,前 ...
- 12C语言标准函数库
C语言标准函数库 数学函数 三角函数 指数和对数函数 双曲线函数 其它函数 Sqrt() Pow() Exp() Log() Sin() Cos() Tan() 时间函数 查找和排序 Bsearch( ...
- 03Struts2基本使用流程
Struts2基本使用流程 1.新建web工程 2.引入struts2类库 3.创建并配置Struts2的核心控制器web.xml用来拦截客户端请求并将请求转发到相应的Action类中来处理 4.创建 ...