iOS页面传值(代理,属性,单例)-传值

来源:互联网 发布:初中女生内衣淘宝 编辑:程序博客网 时间:2024/05/21 06:00

首先内存管理复习

alloc retain copy new遇到这几个都要记得release 或者autorelease


定义属性的时候  

@property(nonatomic,retain)NSArray *arr;

  因为 retain了  所以需要  在.m里面的 dealloc 里面  release 

=======================================================

进入正题

-1

导航栏  控制页面

首先要在AppDelegate里面创建  初始化一个 UINavigationController  

注意:要alloc一个  直接用属性的话也要alloc init一个给它!!!

 第一种

UINavigationController *nav= [[UINavigationControlleralloc] initWithRootViewController:self.viewController];

第二种

.h

@property (strong,nonatomic)UINavigationController *navCotrol;

.m

self.navCotrol = [[UINavigationControlleralloc] init];

    [self.navCotrolpushViewController:self.viewControlleranimated:YES];

这样子就可以切换页面了  他会控制页面切换 当我门在下一个页面的时候 就不能再 重新alloc init一个新的UINavigationController  直接用AppDelegate里面的 这个来控制就ok

在第二个页面里面直接用

   FirstViewController *vc = [[FirstViewControlleralloc] init];

    //页面传值注意传递的是地址

    vc.receArray = self.arr;

    [self.navigationControllerpushViewController:vc animated:YES];

这里的navigationController 就是 之前AppDelegate的alloc init的那个


-2

注意:页面直接的数值传递其实是传递地址的 (两个里面定义属性来传递与接受vc.receArray = self.arr;

 //页面传值注意传递的是地址

   

    FirstViewController *vc = [[FirstViewController allocinit];

    //页面传值 注意传递的是地址

    vc.receArray = self.arr; = self.arr;

    [self.navigationController pushViewController:vc animated:YES];

所以 值改变的时候会导致在vc中改变了数组receArray的内容 都会改变 arr!

(有时候我门不希望它相互影响 )===》可以在vc页面里面 新创建一个数组 遍历得到receArray的数值 然后释放他 这样就不会改变 之前了arr了   或者直接用 MutableCopy==>Copy回忆:可变数组的copy(深拷贝) 重新开辟一块内存空间   不可变的数组等的copy (浅拷贝)改地址 不会重新开辟空间