设为首页 加入收藏

TOP

Objective-c中的delegate浅析(二)
2015-01-22 21:34:20 来源: 作者: 【 】 浏览:124
Tags:Objective-c delegate 浅析
r ; [view performClick] ; } return 0; }

首先创建了一个UIView对象view, 然后调用performClick函数,此时view没有设置delegate,但是由于自己实现了ButtonClickDelegate协议,因此可以为自己代理该点击事件。然后我们创建了ViewController对象controller, 并且将该对象设置为view对象的delegate, 然后执行performClick函数,此时在performClick函数中

会执行ViewController中的onClick函数,即controller代理了view的点击事件处理。输出结果如下 :

点击view的默认处理函数.
ViewController来实现点击事件

delegate与Java中的Listener

delegate与Java中的Listener的功能大致是相同的,比如我们看看Android中一个按钮的点击事件的处理。

	Button	mJumpButton = (Button) findViewById(R.id.button_jump);
	mJumpButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this,
						SecondActivity.class);
				startActivity(intent);
			}
		});

其中的Button就相当于上文中的UIView,而其setOnClickListener就相当于delegate属性的设置方法,OnClickListener就扮演了上文中ButtonClickDelegate的角色,

onClick方法更是如出一辙。其实每个平台大体上的设计思路也都是很相近的,观察不同平台的对比实现更容易理解吧。


delegate与id类型

我们在声明一个delegate对象是的形式是如下这样的 :

// 点击事件代理,因此UIView实现了ButtonClickDelegate协议,因此自己可以为自己代理。
@property (nonatomic, strong) id
   
     clickDelegate ;
   

注意这里的类型是id ;这表明该delegate对象可以是任意类型,但是该类型必须实现ButtonClickDelegate 协议,也可以说成该类型必须采用正式协议ButtonClickDelegate。这个就很像Java中的泛型,例如我们可以在Java中这样使用泛型,

void setData(List
    myorders) ;
在setData函数中接受的参数为元素类型为Order子类的List集合,与id 是不是又很相似呢?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇邻接矩阵有向图(一)之 C语言详解 下一篇c 下的通用数据库接口

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: