控制器之间的传值

页面传值总共有8种方式

-.属性传值(正向传值)

在AttributeVC.h中声明一个属性,用于接收传过来的值

在RootViewVC.m中,赋值

在AttributeVC.m中使用该值

二.代理传值())

首先在第二个页面DelegateVC.h中定义和声明代理,

为什么delegate(代理)属性都是assign而不是retain

循环引用
所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:
    •    对象a创建并引用到了对象b.
    •    对象b创建并引用到了对象c.
    •    对象c创建并引用到了对象b.
这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。
这 种情况,必须打断循环引用,通过其他规则来维护引用关系。比如,我们常见的delegate往往是assign方式的属性而不是retain方式 的属性,赋值不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用。如果一个UITableViewController 对象a通过retain获取了UITableView对象b的所有权,这个UITableView对象b的delegate又是a, 如果这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。自己在设计使用delegate模式时,也要注意这点。
因为循环引用而产生的内存泄露也是Instrument无法发现的,所以要特别小心

在DelegateVC.m中判断代理对象存在,绑定相应的方法

接着在RootViewVC.h

在RootViewVC.m  中指定代理并且执行代理方法

三.block传值(逆向传值)

BlockPassValue.h中

在BlockPassValue.m中

时间: 2024-10-07 08:15:56

控制器之间的传值的相关文章

控制器之间反向传值

控制器之间反向传值 委托(代理) 首先我们定下一个协议protocol 1. #import <Foundation/Foundation.h>2.3. @protocol ChangeText <NSObject>4.5. -(void)changeText:(NSString *)str;6. @end 控制器a遵守协议ChangeText,并实现协议的方法,控制器b公开自己的一个遵守协议ChangeText的属性delegate,在控制器a的视图转到控制器b的视图时,b.de

iOS:使用block进行类与类,控制器与控制器之间的传值

介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值.代理传值.通知传值.block传值或者一些偏好设置也可以用来传值.... 每一种传值方式都有各自的优点和缺点,针对不同情况选择符合需要的方式进行传值.这里我比较喜欢block方式传值,个人觉得简单好用,省却了不少代码. 下面简单给一个在控制器之间FirstViewController和SecondViewController使用block传值的例子: 在SecondViewController中: SecondView

angular控制器之间的传值

每个controller都会有自己的scope,所有的scope都是属于 $rootScope的子或者子的子... 那么问题就好解决了,通过 $rootScope.$broadcast 广播的事件每个controller都能收到事件 另外,我的经验是,尽量不要用event传数据.应该建立一个service来保存数据,并且设置相应getter/setter,具体如下: 每个controller依赖service, call service.setter(...) 统一的service.setter

iOS视图控制器之间delegate传值教程

之前在StackOverFlow上看到一篇讲传值(segue传值和delegate传值)的文章,感觉讲的很清晰,就将delegate部分翻译了一下,有兴趣可以看看. 原文: http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers 译文: 为了从ViewControllerB往回传值到ViewControllerA,我们需要使用协议(Protocols)和代理(Delegates). 为了实现

IOS页面(控制器之间)传值之Block

B要传值给A 1.控制器B中要有一个Block: typedef void (^MyBlock)(NSString* str1,NSString* str2); str1和str2里存放着要传递的参数 2.还要有一个以Block为参数的方法 -(void)chuanzhi:(MyBlock)block{       block(self.textFiled1.text,self.textFiled2.text); } 这样self.textFiled1.text,self.textFiled2.

控制器之间传值,逆传

block有一个非常经典的操作就是控制器之间的传值: 假如说A向B传值是顺传,B向A传值是逆传 A->B顺传:仅仅须要重写prepareForSegue方法,在内部获取到B控制器.而且给B控制器内部的属性赋值就可以 B->A逆传: 1.首先要再B控制器中定义一个block,方法名一般以类名加Block命名,依据须要回传的值的个数以及类型定义相相应的參数,依据需求确定有无返回值,定义方式:typedef 返回值类型 (^类名Block)(參数类型 參数名称,--); 2.定义一个block属性@

MVC 控制器之间传值学习——session

刚接触MVC不久,写的一些代码自己都不忍心看下去.路漫漫其修远兮,宝宝还需努力!之前只用过Session做登录时用户信息的储存,今天对集合类数据做了小小的尝试:利用session在控制器之间传值,以减少代重复率. 1.将数据储存到Session中(不受类型限制): 2.从session中读取数据(注意转换为正确的的数据类型): 3.随你怎么操作. using System.Collections.Generic; using System.Linq; using System.Web.Mvc;

iOS 页面之间的传值总结

iOS 页面之间的传值总结   1.属性传值 (1): 属性传值第一步需要用到什么类型就定义什么样的属性 (2): 从上一个页面到一个页面的选中方法里面将要传的值传到来(上一个页面)备注:这种方法只适用于上一个页面推到下一个页面. 如:MainViewController与SecondViewController两个视图控制器,点击MainViewController中的按钮将跳转到SecondViewController视图,同时想要传递一个值过去.这时可以利用属性传值. 首先SecondVi

ThinkPHP教程_PHP框架之ThinkPHP(二)【URL路径访问与模块控制器、URL四种模式、PATHINFO的两种模式、模板与控制器之间的关系】

一.URL路径访问与模块控制器 URL 模块(控制器) 动作(方法) 即以上三者之间的关系URL:http://127.0.0.1/projectName/index.php/模块/动作 1.ThinkPHP规定,两点 ·第一.所有的主入口文件默认访问index控制器(模块) ·第二.所有的控制器默认执行index方法(动作) 特别强调一下,以上两点是独立的!也就是说"所有的主入口文件默认访问index控制器,并执行默认执行index方法"是不准确的 那么,http://127.0.0