属性修饰&传值

传值 。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;

}


你可能感兴趣的:(属性修饰&传值)