界面间的传值问题

//界面间的传值:

	1、代理传值:(谁要值谁就是代理);

			(1)在代理文件中,设置代理,并实现协议中的方法;

			(2)在传值的界面中,拥有一个代理属性,并使用代理属性调用代理的方法;进行传值;

	2、属性传值:谁需要值,就要在谁中,声明一个属性变量:来接受传入的值,并进行显示;

	3、 block传值:(谁要值,就把block的实现写在谁那里)(与代理类似)

			(1)将block声明称属性(注意:要用copy修饰)(原因:block函数分布在桟区,当我们在其他的页面中调用时,

				有可能被系统释放,造成野指针的内存问题,使用copy将其复制到堆区,进行手动的管理,可以避免野指针访问的问题)

			   (以便在其他的界面中使用)与 调用(要传值的那个界面)

		      (2)  //获取上一个页面的视图控制器 的对象;(数组)viewControllers  
    	
			RootViewController * controller = (RootViewController *)self.navigationController.viewControllers[0];

		  (3)要注意block的方法体的实现与调用的顺序:为了避免在调用时, block方法为实现的问题,经常在调用时,使用[要传值界面的对象    view]的方式;

			//block在使用的过程中会引起引用计数加 1 的问题,造成内存泄露(循环引用)的问题;
 	
			//当block中用到self,以及实例变量时,一般使用__block进行修饰,来避免引用计数+1 的问题;
 
			//例如:
 
 					__block FirstViewController * firstVC = self;
     
  					  firstVC.block = ^(NSString * text){
         
     						firstVC.title = text;
   					 };
     

			
	4、单例传值:单例的声明:给其添加一个同步锁;与此同时,要将其设置为一种静态变量:

//工程里面只有一个实例对象(与程序同寿),并且不能被释放,销毁;

//单例 的使用场景:

//1、音乐播放器;(切换时,音乐不会停止);

//2、当有多个页面需要共同资源,可以将次资源放入单例对象中;

//(1)获取单例对象;

// (2)再取出单例对象的值;

//方法名: 如果方法名以standarxxx; onlyxxxx; defaultxxx; sharedxxx;开头,则表示为获取单例对象的方法;返回值为对象;为类方法;

方式如下:假设单例类为:DataHandle;

+ (DataHandle *)sharedInstance{
    
    //同步锁(为了避免多个线程同时访问同一个额资源,导致资源不同;)
    static DataHandle *  dataHandle = nil;
    
    @synchronized(self){

        if (dataHandle  ==  nil ) {
            
            dataHandle  = [[DataHandle  alloc] init];
            
            [dataHandle  readPlist];
        }
    }
    return dataHandle ;
 }
	5、target…..action 传值:

		(1)在传出段端要使用:[_target performSelector:_action withObject:self];

		  并声明相应的属性:(id)target (SEL)action;并在相应的方法中进行调用;
			
		 (2)在接收端:给相应的属性赋值,并实现action的方法;如:_touchView2.target1 = self; _touchView2.action1 = @selector(pan);


转载于:https://my.oschina.net/u/2447735/blog/501631

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值