iOS OC10_Block

内存五大区域

    //栈
    int a=10;
    NSLog(@"%p",a);
    //堆
    int *p=malloc(40);
    NSLog(@"%p",p);
    //全局
    static int b=10;
    NSLog(@"%p",b);
    //常量
    char *str="iphone";
    NSLog(@"%p",str);
    //代码区
   NSLog(@"%p",maxValue);

结果

2015-07-28 19:07:07.976 OC10_Block[829:71750] 0xa
2015-07-28 19:07:07.977 OC10_Block[829:71750] 0x1001068d0
2015-07-28 19:07:07.977 OC10_Block[829:71750] 0xa
2015-07-28 19:07:07.977 OC10_Block[829:71750] 0x100001f75

Block的四种形式

//1.无参数,无返回值
 void(^block)()=^(){
 //函数大括号里的代码段
 NSLog(@"今天有点多云");
 };
 //block的使用
 block();
 //block自己不会执行,必须调用才会执行block大括号里的代码段

结果

2015-07-28 19:25:43.452 OC10_Block[1239:82416] 今天有点多云
//2.有参数无返回值
void (^block)(int ,int)=^(int a,int b){
int max=a > b ? a : b;
NSLog(@"%d",max);
    };

//调用
block(10,20);
//void (^block)(int ,int)是block的类型,它的名是block,我们也通过名进行调用

结果

2015-07-28 19:27:08.121 OC10_Block[1249:82981] 20
//3.有返回值无参数
//有返回值在函数段的最后要加上return
int(^block)()=^(){

return 100;
};
//block调用时没有参数也要加上括号
NSLog(@"%d",block());

结果

2015-07-28 19:28:07.938 OC10_Block[1256:83327] 100
    //4.有参数有返回值
    NSString *(^block)(NSArray *,NSInteger)=^(NSArray *arr,NSInteger index){
        return arr[index];
    };
    NSLog(@"%@",block(@[@"1",@"2"],1));

结果

2015-07-28 19:29:05.096 OC10_Block[1263:84049] 2

练习

    //返回整数,参数字符串
    NSInteger (^block)(NSString *)=^(NSString *str){
        return str.integerValue;
    };
    NSLog(@"%ld",block(@"111"));

结果

2015-07-28 19:30:42.921 OC10_Block[1271:85319] 111
    //参数日期字符串,返回NSDate类型的日期对象
    NSDate *(^block)(NSString *)=^(NSString *str){
        NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
        return [formatter dateFromString:str];
    };
    NSLog(@"%@",block(@"2015-07-28 10:12:12"));
    //block的函数段中更多使用参数,而返回值更多是调用一方使用

结果

2015-07-28 19:31:33.543 OC10_Block[1278:86117] 2015-07-28 02:12:12 +0000
//通过新的block写一个block
    Block block=^(NSArray *arr){
        return arr[0];
    };
    //block和局部变量
    //__block相当于给a一个在block中修改的权限,否则他只能取值,不能赋值
    __block int a=10;
    void(^block)()=^(){
        a=10*a;
        NSLog(@"%d",a);
    };
    block();

结果

2015-07-28 19:33:14.295 OC10_Block[1301:87551] 100
    //通过block对数组进行遍历
    NSArray *arr=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
    //系统的block
    [arr enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%@",obj);
    }];
    //系统的block的用法就是回车

结果

2015-07-28 19:33:52.913 OC10_Block[1308:88218] 1
2015-07-28 19:33:52.914 OC10_Block[1308:88218] 2
2015-07-28 19:33:52.914 OC10_Block[1308:88218] 3
2015-07-28 19:33:52.914 OC10_Block[1308:88218] 4
2015-07-28 19:33:52.915 OC10_Block[1308:88218] 5
2015-07-28 19:33:52.915 OC10_Block[1308:88218] 6
    //数组排序
    //数组对字符串的排序
    //不可变的数组
NSArray*[email protected][@"zhangyangyang",@"wuhe",@"liushansahn",@"wangjunmin",@"yanglin"];
 //SEL是方法选择器,他是方法选择器的类型
NSArray*newArr[arrsortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",newArr);
NSLog(@"%@",arr);

结果

2015-07-28 19:35:02.000 OC10_Block[1319:89130] (
    zhangyangyang,
    wuhe,
    liushansahn,
    wangjunmin,
    yanglin
)
    //可变数组
NSMutableArray*arr[NSMutableArrayarrayWithObjects:@"zhangyangyang",@"wuhe",@"liushansahn",@"wangjunmin",@"yanglin", nil];
[arr sortUsingSelector:@selector(compare:)];
NSLog(@"%@",arr);

结果

2015-07-28 19:36:27.541 OC10_Block[1326:90109] (
    liushansahn,
    wangjunmin,
    wuhe,
    yanglin,
    zhangyangyang
)
    //数组对对象的排序
    //新建四个人
    Person *per1=[Person baseWithName:@"yanglin" sex:@"nan"];
    Person *per2=[Person baseWithName:@"wuhe" sex:@"nan"];
    Person *per3=[Person baseWithName:@"cunmou" sex:@"nv"];
    Person *per4=[Person baseWithName:@"liushanshan" sex:@"nan"];
    //用字面量创建对象和便利构造器是一样的
    NSArray *[email protected][per1,per2,per3,per4];

    //以学生的姓名作为排序的依据
NSArray*newArr[arrsortedArrayUsingComparator:^NSComparisonResult(Person * obj1, Person* obj2) {
      return -[obj1.name compare:obj2.name];
  }];
    for (Person *per in newArr) {
       NSLog(@"%@",per.name);
    }

结果

2015-07-28 19:37:53.065 OC10_Block[1340:91155] yanglin
2015-07-28 19:37:53.066 OC10_Block[1340:91155] wuhe
2015-07-28 19:37:53.066 OC10_Block[1340:91155] liushanshan
2015-07-28 19:37:53.066 OC10_Block[1340:91155] cunmou
    Person *per1=[Person baseWithName:@"yanglin" sex:@"nan"];
    Person *per2=[Person baseWithName:@"wuhe" sex:@"nan"];
    Person *per3=[Person baseWithName:@"cunmou" sex:@"nv"];
    Person *per4=[Person baseWithName:@"liushanshan" sex:@"nan"];
        NSMutableArray *marr=[NSMutableArray arrayWithObjects:per1,per2,per3,per4, nil];
    [marr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        Person *per11=(Person *)obj1;
        Person *per22=(Person *)obj2;
        return [per11.name compare:per22.name];
    }];
    for (Person *per in marr) {
        NSLog(@"%@",per.name);
    }

结果

2015-07-28 19:38:59.851 OC10_Block[1347:91927] cunmou
2015-07-28 19:38:59.852 OC10_Block[1347:91927] liushanshan
2015-07-28 19:38:59.852 OC10_Block[1347:91927] wuhe
2015-07-28 19:38:59.852 OC10_Block[1347:91927] yanglin

补充

主函数之前

//    //C语言的函数
//    NSInteger maxValue(NSInteger a,NSInteger b){
//        return a > b ? a : b;
//    }

void test1()
{
    NSLog(@"今天真热");
}

int addNum(int a,int b){
    return a+b;
}

typedef int DT;
//新的类型写在*的后面,就是这里的PFUN
typedef int (*PFUN)(int ,int ) ;
typedef NSString *(^Block)(NSArray *) ;
//有返回值,无参数
typedef NSInteger(^TestBlock)();
//
//  BaseModel.h
//  OC10_Block
//
//  Created by dllo on 15/7/28.
//  Copyright (c) 2015年 zhozhicheng. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface BaseModel : NSObject

@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *sex;

-(id)initWithName:(NSString *)name
              sex:(NSString *)sex;

+(id)baseWithName:(NSString *)name
              sex:(NSString *)sex;

@end
//
//  BaseModel.m
//  OC10_Block
//
//  Created by dllo on 15/7/28.
//  Copyright (c) 2015年 zhozhicheng. All rights reserved.
//

#import "BaseModel.h"

@implementation BaseModel

-(id)initWithName:(NSString *)name
              sex:(NSString *)sex{
    self=[super init];
    if (self) {
        self.name=name;
        self.sex=sex;
    }return self;

}

+(id)baseWithName:(NSString *)name
              sex:(NSString *)sex{
    //多态方式完成
    id obj =[[[self class] alloc] initWithName:name sex:sex];
    return obj;
}

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 22:02:40

iOS OC10_Block的相关文章

iOS -- SKSpriteNode类

SKSpriteNode类 继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKSpriteNode.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开发技术

使用fruitstrap实现命令行将IPA包安装到iOS设备上

Requirements Mac OS X. Tested on Snow Leopard only. You need to have a valid iPhone development certificate installed. Xcode must be installed, along with the SDK for your iOS version. Usage fruitstrap [-d] -b <app> [device_id] Optional -d flag laun

iOS -- SKScene类

SKScene类 继承自 SKEffectNode:SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKScene.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开

iOS -- SKPhysicsWorld类

SKPhysicsWorld类 继承自 NSObject 符合 NSCodingNSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKPhysicsWorld.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开发技术文档.虽然已经审阅了本文档的技术准确性,但是它不是最终的版本.本机密信息仅适用于

iOS证书说明和发布

1.首先通过钥匙串访问——证书助理——从证书颁发机构请求证书——填写证书信息(邮箱,常用名称,存储到磁盘)——存储为(自定义名称.certSigningReuqest,简称CSR文件,只是为了提交到苹果开发者账号中,然后就没用了)到本地 2.苹果开发者账号中,创建证书(Development和Production)——上传CSR文件——下载证书运行 ( xxx.cer文件) 注意:只有在当前电脑中生成本地生成证书,上传到苹果开发账号,然后下载cer文件运行后,钥匙串中才有证书以及对应的秘钥 如果

iOS开发——项目实战总结&amp;UITableView性能优化与卡顿问题

UITableView性能优化与卡顿问题 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果有很多数据的时候,就会堆积很多cell.如果重用cell,为cell创建一个ID 每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell 2.避免cell的重新布局 cell的布局填充等操作 比较耗时,一般创建时就布局好 如可以将cell单独放到一个自定义类,初始化时就布局好

解决ios下的微信打开的页面背景音乐无法自动播放

后面的项目发现,还有两个坑,需要注意下: ·本文的解决方案的核心是利用了 微信/易信 在ready的时候会有个 WeixinJSBridgeReady/YixinJSBridgeReady事件,通过监听这个事件来触发的.那有个坑就是 如果微信已经ready了,但还没执行到你监听这个ready事件的代码,那么你的监听是没用的,所以最理想的情况是,监听的js放在head前面(放在css外链之前),确保最新执行,切记!切记!. ·另一个坑就是,本文的解决方案只适合一开始就播放的背景音乐.如果你是做那种

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

iOS库--.a与.framework

一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存. 三.iOS里静态库形式? .a和.framework 四.iOS里动态库形式? .dylib和.framework 五.framework为什么既是静态库又是动态库? 系统的.framework是动态库,我们自己建立的.fram