第六讲 Block块语法及Block与数组的排序,ios字面量的使用(源代码上传)

  1 #import <Foundation/Foundation.h>
  2
  3
  4 #import "Student.h"
  5
  6 int c =200;
  7 int main(int argc, const char * argv[]) {
  8     @autoreleasepool {
  9         /*
 10      -------------------------------------
 11           定义block变量的四种方法
 12      -------------------------------------
 13          */
 14         //无返回值,无形参
 15         void (^myblock)() = ^(){
 16             NSLog(@"-------");
 17         };
 18         myblock();
 19
 20         //无返回值有参数的block
 21         void (^lineBlock)(int) = ^(int n)
 22         {
 23             for (int i=0; i<n; i++) {
 24                 NSLog(@"---------");
 25             }
 26         };
 27         lineBlock(5);
 28         //有返回值无形参
 29         int (^myblock3)() = ^(){
 30             int a=2;
 31             int b=3;
 32             return a+b;
 33         };
 34         int a =myblock3();
 35         NSLog(@"%d",a);
 36
 37         //有返回值,有形参
 38         int (^sumblock)(int,int)=^(int a,int b)
 39         {
 40             return a+b;
 41         };
 42         int c = sumblock(10,11);
 43         NSLog(@"%d",c);
 44
 45
 46
 47
 48         /*
 49      ---------------------------------------
 50
 51         Block的访问局部变量和全局变量的问题
 52
 53      ----------------------------------------
 54
 55          */
 56
 57
 58
 59         int a1=8;  //全局变量
 60         void (^n)(int)=^(int a){
 61         //  a=7;  //局部变量(重名时优先使用)
 62             NSLog(@"---===%d",a1);
 63             NSLog(@"%p",&a1);
 64         };
 65         n(a);
 66         NSLog(@"----%d",a1);
 67         NSLog(@"%p",&a1);
 68
 69         //block内部可以访问外部局部变量的值,如果想要修改要用__block
 70         __block  int a2=8;//使用__block可以修改局部变量
 71         NSLog(@"------%p",&a2);
 72         void (^myblock1)()=
 73         ^{
 74             a2=7;
 75             NSLog(@"---%d",a2);
 76             NSLog(@"-%p",&a2);
 77         };
 78         myblock1(a);
 79         NSLog(@"--%d",a2);
 80         NSLog(@"------%p",&a2);
 81
 82         //block内部  可以使用  外界的局部变量
 83         __block int num = 1;
 84         void (^addNum)() = ^()
 85         {
 86             //在block内部实现面部分,访问不到局部变量
 87             //但是当使用__block后就可以修改局部变量
 88             num++;
 89             int c = num*10;
 90             NSLog(@"%d",c);
 91         };
 92
 93         //调用block
 94         addNum();
 95         NSLog(@"count = %d",num);
 96
 97
 98         //block 与全局变量
 99         //在block内部可以访问全局变量,并且可以修改全局变量
100
101         /*
102          //int c = 200;定义在main上面
103
104          void (^add)() = ^()
105          {
106          c++;
107          NSLog(@"c = %d",c);
108          };
109          add ();
110          NSLog(@"---%d",c);
111
112
113          */
114
115
116     /*
117    -------------------------------------------
118          Block与数组的配合使用(多用于排序)
119     --------------------------------------------
120     */
121
122
123
124
125         //利用block与对数组进行排序(此种方式默认为升序)
126
127         NSArray *array = [NSArray arrayWithObjects:@"as",@"er",@"hfg", nil];
128         NSComparator sortBlock = ^(id string1, id string2){
129
130             return [string1 compare:string2];
131
132         };
133         NSArray *sortArray = [array sortedArrayUsingComparator:sortBlock];
134         NSLog(@"%@",sortArray);
135
136
137         /*
138         students是?一个NSMutableArray对象,包含若干个Student对象。按
139         student的age进?行排序。对姓名进行排序.(student需要自己定义)
140
141         */
142         Student *stu1 = [[Student alloc]initWithName:@"aiaohua" number:@"b1" age:12];
143         Student *stu2 = [[Student alloc]initWithName:@"xiaoming" number:@"b2" age:15];
144         Student *stu3 = [[Student alloc]initWithName:@"giaowang" number:@"b3" age:14];
145         Student *stu4 = [[Student alloc]initWithName:@"oiaofang" number:@"b4" age:11];
146
147         NSMutableArray *num1 = [NSMutableArray arrayWithObjects:stu1,stu2,stu3,stu4, nil];
148
149          [num1 sortUsingComparator:
150                     ^NSComparisonResult(id a, id b)
151         {
152             Student *st1 = (Student*)a;
153             Student *st2 = (Student*)b;
154             if ([st1 age]>[st2 age]) {
155                 return NSOrderedDescending;
156             }
157             else if([st1 age]<[st2 age]){
158                 return NSOrderedAscending;
159             }else {
160                 return NSOrderedSame;
161             }
162
163          }];
164         //用description方法重写后得出结果
165         NSLog(@"%@",num1);
166
167         //按照姓名顺序打印
168     [num1 sortUsingComparator:^NSComparisonResult(id a,id b)
169         {
170             Student *a1 = (Student*)a;
171             Student *b1 = (Student*)b;
172             if ([[a1 name] compare:[b1 name]]>0) {
173                 return NSOrderedDescending;
174         } else if ([[a1 name] compare:[b1 name]]<0)
175             {
176                 return NSOrderedAscending;
177             }else{
178                 return NSOrderedSame;
179             }
180
181         }];
182
183         for (int i=0; i<[num1 count]; i++) {
184             NSLog(@"%@",[num1[i] name]);
185         }
186
187      /*
188
189   ------------------------------------------
190                ios的字面量
191   ------------------------------------------
192
193       */
194
195      //一般方法输出数组,字符串,字典,集合
196
197
198         //数组
199         NSArray *arr = [[NSArray alloc]initWithObjects:@"123",@"456",@"678", nil];
200         NSLog(@"%@",arr);
201         NSArray *arr1 = [NSArray arrayWithObjects:@"21",@"43",@"65", nil];
202         NSLog(@"%@",arr1);
203         //字符串
204         NSString *str = [NSString stringWithFormat:@"%s %d%c","sdf",34,‘d‘];
205         NSLog(@"%@",str);
206         NSString *str1 = [NSString stringWithUTF8String:"huige"];
207         NSLog(@"%@",str1);
208         NSString *str2 = [NSString stringWithString:str1];
209         NSLog(@"%@",str2);
210         //字典
211         NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3", nil];
212         NSLog(@"%@",dic);
213         NSDictionary *dic1 = [NSDictionary dictionaryWithDictionary:dic];
214         NSLog(@"%@",dic1);
215         //集合
216         NSSet *set = [NSSet setWithObjects:@"hui",@"deng",@"xiao", nil];
217         NSLog(@"%@",set);
218         NSSet *set1 = [[NSSet alloc]initWithObjects:@"one",@"two",@"three", nil];
219         NSLog(@"%@",set1);
220
221
222        //用ios字面量定义数组,字符串,字典
223         //定义字符串
224         NSString *str3 = @"hollow";
225         NSLog(@"%@",str3);
226         //定义数组
227         NSArray *arr3 = @[@"12",@"53",@"67"];
228         NSLog(@"%@",arr3);
229         //输出指定元素
230         NSLog(@"--%@",arr3[2]);
231         //定义字典
232         NSDictionary *dic3 = @{@"1":@"one",@"2":@"two",@"3":@"three"};
233         NSLog(@"%@",dic3);
时间: 2024-10-24 21:46:43

第六讲 Block块语法及Block与数组的排序,ios字面量的使用(源代码上传)的相关文章

【学习ios之路:Objective-C】block块语法.NSDate和NSDateFormatter

一.Block块语法 块语法:可以在函数内部定义匿名函数 格式: ^返回值类型(参数列表){函数体}其中返回值类型可以省略 block简单练习: ①.求两个数的最大值 //int (^)(int,int)//block类型 int (^max)(int,int) = ^(int a,int b) {//block的实现体 return a > b ? a : b; }; int value = max(4,6);          printf("%d",value); ②.将一

Block --- 块语法

block 块语法.  --- 匿名函数 block可以在函数内部定义匿名函数. blocK -- 实现两个数的最大值. 函数: #import <Foundation/Foundation.h> #import "Person.h" //1.输出I love ios void output() { printf("I love ios\n"); } //2.求两个数的最大 int maxValue(int x, int y) { return x &g

浅析ios开发中Block块语法的妙用

事实上,任何一个应用的开发都离开多线程.而"块"block与GCD就是苹果OC语言中多线程的核心. 一.块的内部结构 在oc中,块语法以闭包的形式存在,每一个Objective-C对象都占据着某个内存区域.块本身也是一个对象,在存放块的对象内存区域中,首个变量是指向Class的指针,该指针叫做isa.其余内存里含有块对象正常运转所需的各种信息. 以下是块语法的内部结构变量. 1.void*                                   isa(指向class的对象

OC --(6)-- Block、数组高级:Block语法、Block使用、Block实现数组排序

1.Block定义 Block:块语法,本质上是匿名函数(没有名称的函数) 标准C?里?面没有Block,C语言的后期扩展版本,加入了匿名函 数. C++.JS.Swift等语?言,有类似语法,叫做闭包. Block语法和函数指针很相似.

iOS之block块

Block块. 1.声明Block int (^myBlock)(int n) = ^(int num) 类型 (^名称)(需要传的参数)= ^(参数) 2 __block 变量 在block块中修改block块外部变量的值,只有将外部的变量前面加_ _(两个短杠才能修改) 3 __weak 变量 在ARC机制下,如果block中应用控制器对象或者其实例变量,block会对其强引用,导致拷贝一份控制器对象从而造成内存泄露.为了避免这一问题,则需要: __weak typeof(self)weak

OC基础:block.字面量

block 块语法,能够用block去保存一段代码,或者封装一段代码. block 实际是由c语言实现的,运行效率非常高. block 实际借鉴了函数指针的语法. block (^)(參数类型1 參数名1,參数类型2 參数名2...); 返回值类型  (^)(); 1.没有參数,括号也不能省略 2.參数名能够省略 void(^myBlock1)();   无參数无返回值 void(^myBlock2)(int a,int b);   有參数无返回值 int(^myBlock3)();    无參

字面量语法的使用--IOS

使用oc时,经常会用到NSString,NSNumber,NSArray,NSDictionary,下面是关于他们的字面量语法的使用. (1)字面数值 有时需要把整数,浮点数,布尔值封入oc对象中 一般写法: NSNumber *num = [NSNumber numberWithInt:1]; 使用字面量语法: NSNumber *num = @1; 其他类型使用字面量语法: NSNumber *[email protected]; NSNumber *[email protected]; N

块语法Block在MVC思维的妙用之多重M层代理传值

注:以下代码均来自真实项目案例. 在项目开发中,经常避免一些与系统工具交互的功能需求.比如说开启蓝牙,开启相机,通讯录功能,还有数据加密等等. 由于这些功能的实现没有实例化的必要,并且又是许多项目都共用的功能,所以一般我们会作为类的静态方法去作为自己的工具类. 以下是一段将字典的键值对导入通讯录的静态方法代码. 假如说现在有一个这样的逻辑流程,C层按钮交互,将页面某个数据加密导入通讯录. 让我们以MVC的思维梳理一下整过流程. 在这整个事件中,有三个参与者.页面(C层),加密(M层),通讯录导入

ARC中block块作为属性的使用笔记

ARC中block块作为属性的使用笔记 block较难理解,根据在内存中的分布情况就分为3种类型,根据使用的情形又分为很多很多种.虽然用起来容易,但使用不当会造成内存泄露,虽然都是这么说,但你真的研究过为什么会泄露吗?为什么有些时候外部变量进入block的时候会导致引用计数+1呢? 本人做过MRC以及ARC的开发,但大势所趋,ARC将是以后开发的主要模式,即使有MRC也是ARC混编MRC的代码,所以,本文的block的一些使用上的心得都基于ARC的,已经不考虑MRC的了,请看官注意,MRC与AR