iOS开发之属性、单例、代理、通知传值比较
来源:互联网 发布:陕西软件行业待遇 编辑:程序博客网 时间:2024/06/03 14:48
一.属性传值:
一般用于上级页面传值到下级页面,属性声明在下级页面,用于接收上级传过来的值.
secondViewController跳转到detailViewController并且,title的值赋给textfield
SecondViewController.m- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { DetailViewController * detailVC = (DetailViewController*)segue.destinationViewController;//推出页面detailVC .text = self.navigationItem.title;//属性传值}DetailViewController.h@property(nonatomic,retain)NSString * text;//接受上级页面传过来的字符串DetailViewController.mself.textField.text = _text;//赋值
二、单例传值
单例传值类似与属性传值,不过相对麻烦,充当小三角色
和应用程序生命周期一致,仅有一个
创建单例类SingleInstanceSingleInstance.h@interface SingleInstance : NSObject+ (instancetype)shareInstance;//创建类方法@property(nonatomic,retain)NSString * text;//保存值的@endSingleInstance.mstatic SingleInstance * instance = nil;//方法一, 主线程//+(instancetype)shareInstance//{// @synchronized(self){//同步锁 // if (instance == nil ) { // instance = [[SingleInstance alloc]init ]; // }// }// // return instance;//}//GCD方式,block放在队列中,+ (instancetype)shareInstance{ static dispatch_once_t predicate; dispatch_once(&predicate, ^{//检查参数是不是执行一次 instance = [[SingleInstance alloc ]init ]; }); return instance ;}SecondViewController.mSingleInstance * instance = [SingleInstance shareInstance]; instance.text = self.navigationItem.title;DetailViewController.m_textField.text = instance.text;
三.代理传值:
实质:通过协议方法中的<参数>实现值传递:如- (void)sendValue:(NSString *)text
口诀:①.哪个页面(类)需要值,这个页面(类)即代理,协议方法的实现和遵守协议以及设置代理就写在哪个页面(类)里.
②.声明代理属性,就写在传值的那个页面(类)里,这个页面(类)即委托人.
③.想什么时候将值传过去,那就是让[代理 执行协议方法:实参值];
//注意:如果想用好代理-协议:
①.要明确谁是委托人:registerVC
②.谁是代理:loginVC
③.委托人要让代理做什么事:RegisterViewControllerDelegate
其实:
registerVC只是负责将值传到上级页面(代理),代理接收到值,至于接收到的值,代理loginVC怎么处理,registerVC不管.
设置协议及方法 //SecondViewController.h @protocol secondViewDelegate -(void)showName:(NSString *)nameString; @end 设置代理(为防止循环引用,此次采用了weak) //SecondViewController.h @interface SecondViewController : UIViewController @property (nonatomic, weak)id<secondViewDelegate> delegate; @property (nonatomic, copy) ablock block; @end 点击按钮传递数组让其显示 //SecondViewController.m - (IBAction)delegateMethod:(id)sender { if ([self notEmpty]) { [self.delegate showName:self.nameTextField.text]; [self dismissViewControllerAnimated:YES completion:nil]; }else{ [self showAlert]; } } 调用,显示 //RootViewController.m -(void)showName:(NSString *)nameString{ self.nameLabel.text = nameString; }
四、Notification传值
favoriteViewController.m//向通知中心发送响应 //1.获取通知中心对象 NSNotificationCenter * center = [NSNotificationCenter defaultCenter]; //2.第三个参数表示传到通知中心的值 NSDictionary * value = @{@"cowName":@"小黄",@"color":[UIColor yellowColor]}; [center postNotificationName:@"findCow" object:self userInfo: value ];DetailViewController.m- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //通知中心() //获取通知中心这个单例对象 NSNotificationCenter * notificationCenter = [NSNotificationCenter defaultCenter]; //2.注册通知 //第一个参数:表示给通知中心添加一个观察者。第二个参数:表示当对这个通知有人响应的时候,观察者要执行的方法, //第三个参数:表示这个通知名。第四个参数:表示响应者(向通知中心发送响应的人),如果是nil,表示任何人都可以响应通知 [notificationCenter addObserver:self selector:@selector(payMoney:) name:@"findCow" object:nil];}- (void)payMoney:(NSNotification * )notification{ //还钱 NSLog(@"name = %@",notification.name); NSLog(@"object = %@",notification.object); NSLog(@"userInfo = %@",notification.userInfo); UIColor * color = notification.userInfo[@"color"]; self.view.backgroundColor = color;}- (void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self name:@"findCow" object:nil]; [super dealloc];}
0 0
- iOS开发之属性、单例、代理、通知传值比较
- iOS 之单例 代理 通知
- iOS 传值方法(属性传值、代理传值、Block、通知、单例)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知
- iOS 通知,代理,单例,block传值
- OC 六大传值 (属性/代理/通知/KVO/KVC/Tag/单例/Block/全局)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- IOS中5种传值方式详解(属性、Block代码块、代理、单例、通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- 2015.9.3反法西斯胜利70周年大阅兵评论
- 异常
- 密码框组件的使用
- TCP/IP发送图片,swing.JPanel显示并更新图片(二、图片发送和发送/接受的同步)
- 如何快速使用log4j进行开发
- iOS开发之属性、单例、代理、通知传值比较
- Android第八讲——多媒体(四)播放视频(mp4/3gp) MediaPlayer
- U3D UGUI学习2 - RectTransform
- 全注解SSH
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 百度地图接口调用
- Maven实战之antrun插件
- 攻下隔壁女生路由器后,我都做了些什么
- Implement Queue using Stacks