控制器属性传值的一些小问题
控制器属性传值的一些小问题
这篇博文并没有什么技术含量,属于很基础的知识,但也容易在感官上产生错误的认识,今天记录于此。
一个对象,无论是被转存到数组中,还是被多个控制器持有,如果这个对象没有发生值的拷贝(创建出新的对象),所有的对这个对象的持有者只持有了一个样本,修改了这个样本的值会影响到所有持有者。
效果演示图:
测试用源码:
DataModel.h 与 DataModel.m
// // DataModel.h // BaseViewController // // Created by YouXianMing on 15/1/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h>@interface DataModel : NSObject@property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSNumber *age; @property (nonatomic, strong) NSArray *array;@end
// // DataModel.m // BaseViewController // // Created by YouXianMing on 15/1/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "DataModel.h"@implementation DataModel@end
ChangeValueViewController.h 与 ChangeValueViewController.m
// // ChangeValueViewController.h // BaseViewController // // Created by YouXianMing on 15/1/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> #import "DataModel.h"@interface ChangeValueViewController : UIViewController@property (nonatomic, strong) DataModel *dataModel;@end
// // ChangeValueViewController.m // BaseViewController // // Created by YouXianMing on 15/1/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "ChangeValueViewController.h"@interface ChangeValueViewController ()@property (nonatomic, strong) UILabel *label;@end@implementation ChangeValueViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor yellowColor];self.dataModel.age = @(self.dataModel.age.intValue + 1);self.dataModel.array = @[@"2", @"1", @"2"];[self createButton];[self createLabel]; }#pragma mark - 创建出label - (void)createLabel {self.label = [[UILabel alloc] initWithFrame:self.view.bounds];self.label.text = @"Back";self.label.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:70.f];self.label.textAlignment = NSTextAlignmentCenter;self.label.textColor = [UIColor grayColor];[self.view addSubview:self.label]; }#pragma mark - 创建按钮以及按钮事件 - (void)createButton {UIButton *button = [[UIButton alloc] initWithFrame:self.view.bounds];[self.view addSubview:button];[button addTarget:selfaction:@selector(buttonEvent:)forControlEvents:UIControlEventTouchUpInside]; } - (void)buttonEvent:(UIButton *)button {[self dismissViewControllerAnimated:YES completion:^{}]; }@end
ViewController.m
// // ViewController.m // BaseViewController // // Created by YouXianMing on 15/1/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "ViewController.h" #import "ChangeValueViewController.h" #import "DataModel.h"@interface ViewController ()@property (nonatomic, strong) DataModel *dataModel; // 数据model @property (nonatomic, strong) UILabel *label;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 数据modelself.dataModel = [DataModel new];self.dataModel.name = @"YouXianMing";self.dataModel.age = @(27);self.dataModel.array = @[@"1"];[self createButton];[self createLabel]; }#pragma mark - 创建出label - (void)createLabel {self.label = [[UILabel alloc] initWithFrame:self.view.bounds];self.label.text = [NSString stringWithFormat:@"%@ - %@", self.dataModel.name, self.dataModel.age];self.label.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:30.f];self.label.textAlignment = NSTextAlignmentCenter;self.label.textColor = [UIColor grayColor];[self.view addSubview:self.label]; }#pragma mark - 创建按钮以及按钮事件 - (void)createButton {UIButton *button = [[UIButton alloc] initWithFrame:self.view.bounds];[self.view addSubview:button];[button addTarget:selfaction:@selector(buttonEvent:)forControlEvents:UIControlEventTouchUpInside]; } - (void)buttonEvent:(UIButton *)button {ChangeValueViewController *changeValueViewCV = [ChangeValueViewController new];// 获取数据changeValueViewCV.dataModel = self.dataModel;[self presentViewController:changeValueViewCVanimated:YEScompletion:^{}]; }#pragma mark - 控制器view - (void)viewWillAppear:(BOOL)animated {self.label.text = [NSString stringWithFormat:@"%@-%@", self.dataModel.name, self.dataModel.age];NSLog(@"%@", self.dataModel.array); }@end
只要DataModel被ViewController一直持有,所有的持有这个DataModel的控制器,修改了DataModel的值,就会影响到全局的值,这点需要注意哦。
转载于:https://www.cnblogs.com/YouXianMing/p/4198952.html
控制器属性传值的一些小问题相关推荐
- UI 07 _ 导航视图控制器 与 属性传值
首先, 先创建三个VC. 完毕点击按钮, 进入下一页, 并可以返回. 要先把导航视图控制器创建出来. 在AppDelegate.m 文件里代码例如以下: #import "AppDelega ...
- IOS开发控制器之间传值的几种小方法
在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...
- vue中传值和传引用_vue prop属性传值与传引用示例
vue prop属性传值与传引用示例 vue组件在prop里根据type决定传值还是传引用. 简要如下: 传值:String.Number.Boolean 传引用:Array.Object 若想将数组 ...
- 从视图到控制器的传值方法(表单)
从视图到控制器的传值方法(表单) Views中: 将数据提交到某个控制器的方法中,在该方法中去做处理 <form action="/控制器/get"method=" ...
- eazyui ajax传值,jquery easyui ajax data属性传值方式
$.ajax({ url:url, type:'post', data:data, dataType:'json', contentType: "application/x-www-form ...
- 四大传值详解:属性传值,单例传值,代理传值,block传值
一:属性传值 传值情景:从前一个页面向后一个页面传值 a.在后一个页面,根据传值类型和个数,写属性 b.在前一个页面, 为属性赋值 c.在后一个页面, 使用值 例如: 第一个视图: #import & ...
- iOS属性传值传递不过去
2019独角兽企业重金招聘Python工程师标准>>> 有时候,我们在进行属性传值的时候,会发现传递过去的属性是空值,即为null,导致原因是: 因为属性传值,有时候我们在init里 ...
- vue用公共组件页面传值_微信小程序页面传值、组件间通信总结
小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在微信内被便 捷地获取和传播,同时具有出色的使用体验.对于微信小程序,前端开发应该不陌生,目前也 是非常火,很多公司都会进行开发.对 ...
- IOS开发UI篇—导航控制器属性和基本使用
IOS开发UI篇-导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...
最新文章
- webalizer日志分析软件的安装
- 几种经典的数据排序及其Java实现
- 零基础学习Java-素数和
- Codeforces Round #341 (Div. 2)
- HTML5实现输入密码(六个格子)
- 动态规划-hdoj-4832-百度之星2014初赛第二场
- 英国大学diploma(证书)期末考试挂科
- 计算机开机桌面黑,电脑开机后桌面自动变成黑色的
- 联想用u盘重装系统步骤_联想电脑怎样重新安装系统方法步骤详细教程 - 系统家园...
- 红孩儿编辑器的模块设计13
- C语言实现求最小公倍数。
- 走过30年岁月的WPS,它的复兴之路该怎么走
- 2016互联网金融安全峰会报名
- 49个终身受用的世界顶级思维(收藏)
- Tableau实用小技巧之——红绿色字体颜色设置
- IDC机房的PDU电源插座
- 【腾讯Bugly干货分享】Android 进程保活招式大全
- 花呗额度,为什么每个月只能修改一次。
- kanzi学习之路(序)
- 申请电子面单号API接口文档
热门文章
- python天天学怎么样-每天一遍,好好学习,天天向上(Python)
- python创建csv文件并写入-【已解决】Python中创建和保存数据到csv文件中
- python绘图实例-Python matplotlib基础绘图函数示例
- python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)
- python能做什么游戏好-Python有做大型游戏的潜力吗?
- python爬虫赚钱的经历-聊一聊,这些年我用Python爬虫挣钱的那些事
- python详细安装教程3.7.4-Linux下Python3.7.4 安装教程
- python3.7安装numpy模块-Python3.7模块numpy
- 只会python好找工作吗-转行学Python能拿多少钱?二线工作好找吗?
- python代码块使用缩进表示-python中的代码块使用缩进来表示。