Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么UIKit或Cocoa必须用Objective-C编码?_C++_Objective C_Cocoa_Cocoa Touch_Uikit - Fatal编程技术网

C++ 为什么UIKit或Cocoa必须用Objective-C编码?

C++ 为什么UIKit或Cocoa必须用Objective-C编码?,c++,objective-c,cocoa,cocoa-touch,uikit,C++,Objective C,Cocoa,Cocoa Touch,Uikit,定期会有一种含糊不清的说法,即objective-c对于UIKit及其前身Cocoa的创建是必要的,但这种说法很少得到澄清或阐述。与消息转发有点模糊的关系。但所有用户界面都转发事件,而不管它们是用什么语言编写的。所以现在我要问:ObjuleC的哪些具体方面对于实现UIKIT或其前任COCOA来说是至关重要的,而C++或java也不能提供? < P>动态绑定迟和类型的能力。 这方面的需求有几个例子,但最清楚的是响应者链。试着用Swift写(不使用Objective-C或Objective-C的RT

定期会有一种含糊不清的说法,即objective-c对于UIKit及其前身Cocoa的创建是必要的,但这种说法很少得到澄清或阐述。与消息转发有点模糊的关系。但所有用户界面都转发事件,而不管它们是用什么语言编写的。所以现在我要问:ObjuleC的哪些具体方面对于实现UIKIT或其前任COCOA来说是至关重要的,而C++或java也不能提供?

< P>动态绑定迟和类型的能力。 这方面的需求有几个例子,但最清楚的是响应者链。试着用Swift写(不使用Objective-C或Objective-C的RTE)继续

不,不是所有的语言。即。在C++中,他们必须添加信号和时隙,以便使语言对现代UI编程有用。基本上,没有动态绑定的每一种语言——至少作为回退——都没有用

  • Swift使用Objective-C作为动态开门器
  • C++使用信号和插槽
  • C有代表

顺便说一句:GUI的概念和动态调度的概念是在同一时间同一地点发明的。也许这是有原因的。

好的,为什么不能在Java或C中完成响应器链?你能详细说明一下响应者链的特殊之处吗?假设你想找到第一个能够处理某些消息的响应者,比如
foo:
。在Objective-C中,您可以说,“第一个响应者是否支持
foo:
?否?好的,下一个响应者是否支持
foo:
?否?好的,下一个响应者是否支持
foo:
?哦,它支持吗?太好了!在该对象上调用
foo:
。”这就是为什么当你们把它们连接到Interface Builder中的第一个响应者时,事情就开始工作了。如果没有动态调度机制,这要简单得多。你开玩笑吧?听说过一堆吗?将FirstResponder推到堆栈上,然后在resignFirstResponder中弹出它。没有人在开玩笑。问题是,响应器链中的项不一定继承自同一基类,并且发送的消息可以自定义。当然你可以用C写,当然你也可以用另一种语言写一个模拟器。但关键是,你必须这样做。当NeXTSTEP(C++的前身)被创建时,java和C++是否存在?