1、逗号表达式,返回整个逗号表达式的返回值是最后一个表达式的返回值,长见识了,第一次听说,比如
int x = (a = 3,a = 4,a = 5,a = 6);
NSLog(@"x is %d",x);x is 6
1)、srand((unsigned)time(0)); //不加这句每次产生的随机数不变
int i = rand() % 5;
2)、srandom(time(0));
int i = random() % 5;
3)、int i = arc4random() % 5 ;
注:rand()和random()实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。
arc4random() 是一个真正的伪随机算法,不需要生成随机种子,因为第一次调用的时候就会自动生成。而且范围是rand()的两倍。在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296)。
精确度比较:arc4random() > random() > rand()。
3、块的基本用法,定义如下
^[块返回值类型](形参类型1 形参1 形参类型2 形参2)
{
//块执行体
}
1)、定义块必须以^开头
2)、定义块返回值类型一般省略
3)、定义块不需要值名字
4)、块的参数可以是(void)
块变量格式
块返回值类型(^块变量名)(形参类型1,形参类型2);
一般使用
#import <Foundation/Foundation.h>
int main(int argc,char * argv[]) {
@autoreleasepool {
void (^printStr)(void) = ^(void) {
NSLog(@"我在学习oc的块");
};
printstr();
int (^sum)(int,int) = ^(int a,int b) {
return a + b;
};
NSLog(@"sum is %d",sum(a,b));
void (^print)(Nsstring) = ^(Nsstring *info) {
NSLog(@"info value is %@",info);
};
print(@"chenyu");
}
}
块可以访问局部变量的值,但是不许修改,因为传递进去的是值,不是地址,所以不能修改,following
下面代码会引起错误
int value = 20;
void (^print)(void) = ^(void) {
value = 30;
NSLog(@"%d",value);
}
value = 45;
print();
看下面的例子
int value = 20;
void (^print)(void) = ^(void) {
NSLog(@"%d",value);
}
value = 45;
print();
结果打印是20,我们不是修改了成了45吗?当程序用块访问局部变量时,系统在定义块会把局部变量的值保存在块中,而不是等到执行时才去访问获取变量的值,如果考虑块要修改局部变量的值,我们可以用_block修饰局部变量
_block int value = 20;
void (^print)(void) = ^(void) {
//会打印出45
NSLog(@"%d",value);
value = 40;
//会打印出40
NSLog(@"%d",value);
}
value = 45;
print();
//会打印出40
NSLog(@"%d",value);
用_block作为修饰的时候可以理解为传递指针到块里面去了,可以修改地址从而修改值
用typedef定义块变量类型,格式如下
typedef 块返回值类型 (^块变量类型)(形参类型1,形参类型2)
typedef void (^Print)(Nsstring *);
Print print = ^(Nsstring *info)
{
NSLog(@"%@info",info);
}
print(@"chenyu");
块有点像C语言里面的函数指针。
测试:
typedef int (^Add) (int,int);
typedef void (^Show) (Nsstring *);
int main(int argc,char * argv[]) {
@autoreleasepool {
void (^pri)(void) = ^(void) {
NSLog(@"hello world");
};
pri();
Add add = ^(int a,int b) {
return a + b;
};
int result = add(4,5);
NSLog(@"4 + 5 is: %d",result);
Show show = ^(Nsstring * info) {
NSLog(@"%@",info);
};
show(@"chenyu");
}
}
结果:
hello world
4 + 5 is: 9
chenyu
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。