1、通知
在传值的地方写:
// 创建通知对象
NSString *str = @"通知";
NSNotification *note = [[NSNotification alloc] initWithName:@"TextValueChanged" object:str userInfo:nil];
// 通过通知中心发送通知
[[NSNotificationCenter defaultCenter] postNotification:note];
接收的地方写:
// 接收通知
// 向通知中心注册一个新的观察者(第一个参数)
// 第二个参数是收到通知后需要调用的方法
// 第三个参数是要接收得通知的名字
// 第四个参数通知是nil,表示不管哪个对象发送通知都要接收
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noteReceived:) name:@"TextValueChanged" object:nil];
-(void)noteReceived:(NSNotification *)note
{
UILabel *label = (UILabel *)[self.view viewWithTag:1000];
NSString *str = note.object;
label.text = str;
}
//释放数据防止通知泄露,去掉通知
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
2、委托回调
先建一个Protocol文件
申明委托的方法
在传值类的.h中写
#import <UIKit/UIKit.h>
#import "CDChangeValueDelegate.h"
@interface SecondViewController : UIViewController
@property (nonatomic,strong) id<CDChangeValueDelegate>delegate;
@end
.m中要传值的位置写
NSString *str = @"委托";
[self.delegate changeValue:str];
在接收地方写(记得要写代理)
3、block传值
在要传值类的.h中申明block
#import <UIKit/UIKit.h>
typedef void (^CDMyBlockType)(NSString *);
@interface SecondViewController : UIViewController
//用一个属性来接收block表达式
@property (nonatomic,copy) CDMyBlockType block;
@end
传值.m中写
// 传送block的参数
NSString *str = @"Block";
self.block(str);
在接收地方写
SecondViewController *second = [[SecondViewController alloc] init];
// 接收block传的值
second.block = ^(NSString *str)
{
UILabel *label =(id)[self.view viewWithTag:1000];
label.text = str;
};
4、单例传值
首先建一个类Appstorage
在传值地方进行赋值
NSString *str = @"单例";
[AppStorage sharedInstance].str = str;
在接收地方写
UILabel *label = (UILabel *)[self.view viewWithTag:1000];
if ([AppStorage sharedInstance].str) {
label.text = [AppStorage sharedInstance].str;
}