详解iOS页面传值(顺传 逆传)

2020-01-18 19:49:01于海丽

第五步:在A的延展或者A的.h文件中导入协议名称<协议名称>


#pragma mark A的.m的延展里,A就是RootTabBarController
// 协议导入
@interface RootTabBarController () <CustomTabBarDelegate>
@end

第六步:在A的.m中事项协议方法,取得参数中得知,呈现在当前界面上


#pragma mark A的.m
// 实现代理方法,这里就可以使用从B传来的值了
- (void)selectedIndexWithTag:(NSIngeter)tag
 {
  self.selectedIndex = tag;
 }

使用Block页面间传值

第一步:在B的.h中重定义一个block,用这个重定义的block类型声明一个类的属性这里要注意用copy修饰block属性


#pragma mark B的.h 
#import <UIKit/UIKit.h> 
// block传值 
// 重命名一个有参无返回值的block类型 
typedef void(^passValue)(NSInteger tag); 
@interface CustomTabBarView : UIView 
 //用这个block类型定义一个属性 
@property (nonatomic,copy)passValue passValueTag; 
@end

第二步:在B的.m的返回方法中调用block的方法


#pragma mark B的.m的返回方法中 
//调用block方法 
self.passValueTag(sender.tag - 1000);

第三步:在A的.m中创建B的实例的地方,为B的block属性赋值,也就是说,写好这个block中的内容,类似于给B的某一个属性赋初值


// 设置block内容 
 customView.passValueTag = ^(NSInteger tag) 
 { 
  self.selectedIndex = tag; 
 };

没有引用局部变量的Block内存存储在全局区

引用了局部变量的Block内存存储在栈区

当对Block进行copy操作的时候Block的内存存在堆区

Block的循环引用问题

当Block是self的一个属性的时候

self.circleBlock = ^(){my_self.navigationItem.title = @"Hello";};

会导致self的引用计数+1,最终导致循环引用

在ARC下使用weak修饰变量防止循环引用

在非ARC下使用block修饰变量防止循环引用

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持ASPKU!


注:相关教程知识阅读请移步到IOS开发频道。