关于OC中的block自己的一些理解(二)

一、block延伸:页面间反向传值

1)first页面的代码

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupBtn];
    self.view.backgroundColor = [UIColor whiteColor];

}
- (void)setupBtn
{
    UIButton * btn = [[UIButton alloc]init];
    [btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
    btn.backgroundColor = [UIColor blackColor];
    btn.frame = CGRectMake(100, 100, 100, 100);
    [self.view addSubview:btn];
}
- (void)buttonClick
{
    SecondViewController * secondVC = [[SecondViewController alloc]init];
    //在first页面调用block输出字符串
    secondVC.myBlock= ^(NSString * str){
        NSLog(@"%@",str);
    };
    [self.navigationController pushViewController:secondVC animated:YES];
}

2)second页面的代码

//.h文件
#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController
//定义block
@property (nonatomic,copy)void (^myBlock)(NSString * str);
@end
//.m文件
- (void)setupBtn
{
    UIButton * btn = [[UIButton alloc]init];
    [btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
    btn.backgroundColor = [UIColor blackColor];
    btn.frame = CGRectMake(100, 100, 100, 100);
    [self.view addSubview:btn];
}
- (void)buttonClick
{
    //通过block传值
    if (self.myBlock) {
        self.myBlock(@"haha");
    }
    [self.navigationController popToRootViewControllerAnimated:YES];
}

输出结果:

2016-02-19 11:36:55.168 03-block[983:70116] haha

参考博客:http://my.oschina.net/leejan97/blog/268536?fromerr=2UdIND3G

时间: 2024-11-07 05:32:42

关于OC中的block自己的一些理解(二)的相关文章

oc中的block

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //block的规则 //返回值类型(^block名称)(形参参数列表)一般形参变量名不用写= ^返回值类型(实参数列表){block体}; // int (^block3)(int) = ^(int)(int x){ return 101;}; //int result=block(3);调用 //注意要

OC中的Block数据类型和protocol

Block数据类型 作用:封装一段代码,可以再任何地方执行. 定义格式:返回值类型 (^变量名)(传入的形参的数据类型) = ^(传入代码块的参数){代码块}; 调用方法:变量名(实参): block其实与函数差不多,他们的相同之处有: 1.都可以保存代码 2.都可以有返回值 3.都有形参和实参 4.调用方式一样 使用注意: 1.Block内部可以访问外面的成员变量 2.默认情况下,Block内部不能修改外面的局部变量 3.如果一定要在Block内部修改外面的局部变量,可以再该局部变量前加__b

OC 中的block使用

在iOS的开发过程中,使用块的地方很多也很方便,但是在使用块的过程中要注意内存泄露的问题. 在块创建的时候,会对块内的所有对象的引用计数加一,直到块销毁,所以在使用块的过程中需要我们进行处理,在这里以AFNetworking的代码举例,代码如下: __weak __typeof(self)weakSelf = self; self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{

OC 中的block存储位置

一.block块的存储位置(block块入口地址):可能存放在2个地方:代码区.堆区(程序分5个区,还有常量区.全局区和栈区). 详细介绍: 情况1:代码区 不访问处于栈区的变量(例如局部变量),且不访问处于堆区的变量(例如alloc创建的对象).也就是说访问全局变量也可以. /** 没有访问任何变量 */ int main(int argc, char * argv[]) { void (^block)(void) = ^{ NSLog(@"==="); }; block(); }

oc中的block使用心得

typedef void (^ simpleBlock) (void); typedef double (^multiplyTwoValues)(double, double); typedef void (^ simpleTestBlock) (int ,int); @implementation TJAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic

iOS oc中的 block使用

int (^myBlock)(NSString *) = ^(NSString *string){ return [string intValue]; } ; int count = 0; int  块的类型   ^声明一个myBlock块 (NSString)有一个参数确定参数类型 ^(NSString *string){ return [string intValue]:}块对象的语法结构 也就是赋给myBlock的值 string参数名 {return [string intValue]}

OC中数组类NSArray的详解(二)

数组类的便利 1.for循环(大家都会的...) 2.NSEmunerator 3.for in 首先重点说下 第二种NSEmunerator枚举器,系统声明是 1 @interface NSEnumerator : NSObject <NSFastEnumeration> 2 3 - (id)nextObject; 4 5 @end 6 7 @interface NSEnumerator (NSExtendedEnumerator) 8 9 @property (readonly, copy

Objective-C中的Block(闭包)

学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过Javascript的小伙伴对闭包应该不陌生吧~学过PHP的应该也不陌生,在PHP5.3版本以后也支持闭包, 也就是OC中所提到的Block. 到底什么是闭包或者block呢?用大白话说就是匿名函数,也就是在函数中可以包含这函数.就是在函数中可以定义匿名函数然后在函数中调用.学习OC中的block之前也小担心一下,Block在OC中属于高级的部分,心里有又有个疑问:学起来难不难?看过Block的

OC中分类、类扩展、Block、协议(由协议引出的代理模式)

一: 分类(Category) 1>Category的概念:就是在不改变原来类的基础上,为类增加一些方法 (1,可以为库中定义的类增加方法:2,可以给自己定义的类增加方           法)仅仅是方法哦 好处:一个类可以有多个文件,编译器会将这些文件按一个类除了,便于团队合作. 2> 代码格式: 自定义类中加分类 Person类 #import "Person.h" @interface Person : NSObject - (void)sayHi; @end @im