传值 。iOS 页面间几种传值方式(属性,代理,block,单例,通知)。属性的修饰
知识点总结:
1)属性的修饰(不同的类型分别用什么词语修饰)
2)什么是懒加载机制
3)视图控制器传值得过程
1.在viewController2声明string
2.在跳转时将viewController1中的值传给vc2的属性string
3.在viewController2的viewDidLoad方法中将属性string的值显示到界面上
*/
ViewController1.M
//触摸屏幕,跳到第二页
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
//创建下一个视图控制器对象
ViewController2 *vc = [[ViewController2 alloc] init];
//用对象调属性赋值,
vc.text2.text=self.text1.text;
//NSLog(@"--000",self.text1.text);
//输出发现vc.text2.text的值为空,vc.text2并不存在
//原因:视图控制器存在一种懒加载机制,也就是视图控制器在创建时它自带的view属性并不会创建,而是在需要显示view才会创建view,所以这就是懒加载机制
//在将VC设置为根视图控制器之后才会创建并显示view,所以在这里,view并没有被创建
//VC的另一个属性text2同样的道理,在这里还没有被创建,所以输出为空null
//解决方法:使用与界面无关的属性string进行传值
vc.string=self.text1.text;
//原因:与界面相关的属性都会懒加载,而与界面无关的属性会在视图控制器对象创建时创建出来
UIWindow *window = [UIApplication sharedApplication].windows[0];
window.rootViewController= vc;
ViewController2.h
@interface ViewController2 :UIViewController
//全局变量
//{
// NSString *_string;
//}
@property (weak,nonatomic) IBOutletUITextField *text2;
//@property把全局变量变为属性
//属性修饰
//每一个属性在声明是,有两个修饰词语写在小括号里边,其中一个固定是nonatomic
//atomic原子性nonatomic非原子性
//nonatomic解决多线程同步的问题
//另外一个修饰词语根据属性类型的不同,有所区别
//1.基本属性类型(int ,float等)用assign修饰
//2.字符串类型nsstring用copy修饰
//3.类类型(UIlabel people)用retain修饰
//在ARC下,系统习惯用strong(字符串)和weak(基本) readonly(只读)修饰
//static静态用它修饰的变量只会初始化一次,静态变量
@property (nonatomic,copy) NSString *string;
@end
ViewController2.m
- (void)viewDidLoad {
[super viewDidLoad];
//把属性传过来的属性string的值显示到text上
_text2.text=_string;
}