我有一个理论问题.现在我正在阅读Apple的ViewController指南.
他们写:
当需要关闭呈现的视图控制器时,首选方法是让呈现视图控制器关闭它.换句话说,只要有可能,呈现视图控制器的同一视图控制器也应负责解除它.尽管有几种技术用于通知呈现视图控制器应该解除其呈现的视图控制器,但是优选的技术是委托.
但我无法解释,为什么我必须在呈现的VC中创建一个协议并添加委托变量,在呈现VC中创建委托方法以解除所呈现的VC,而不是在呈现的视图控制器方法中的简单调用
[self dismissViewControllerAnimated:NO completion:nil]?
为什么第一选择更好?为什么Apple推荐它?
我试图理解,Objective-C 中的方法签名是怎样的。
介绍:
首先,让我们打破对问题的误解,它是什么,方法签名?方法签名是帮助编译器明确识别子程序的东西。我对吗?:)
所以在C语言中签名大致相当于它的原型定义:比如我们int printf( const char *format, ... );在stdlib中有函数。此函数的签名是printf。在这种情况下,我们不能在 C 语言中重载,因为编译器无法识别具有不同参数类型的函数,所以人们决定做一些像这样的棘手事情:
long int labs (long int n);
int abs (int n);
double fabs (double x);
Run Code Online (Sandbox Code Playgroud)
在 C++ 语言中,方法签名是类名、方法名和方法参数。所以在这种语言中,我们可以重载方法。
问题
我无法得到简单的答案,Objective-C 中的方法签名是什么?!我正在尝试使用我的逻辑...
1) 首先,我们不能在 Objective-C 中重载 => 方法参数不是方法签名的一部分。
2)我尝试编译具有不同返回值的代码:
@interface Foo : NSObject
- (CGFloat)method;
- (NSInteger)method;
@end
Run Code Online (Sandbox Code Playgroud)
在这种情况下我遇到错误 => 返回值不是方法签名的一部分。
我测试了不同的情况并得到了答案,Objective-C 中的方法签名是类名、方法类型(“+”或“-”)和选择器。例如,我们在类 Foo 中有方法(下面的代码):
@interface Foo : NSObject
+ (void)methodWithArgument:(NSInteger)argument;
@end
Run Code Online (Sandbox Code Playgroud)
所以这个方法的签名是+[Foo methodWithArgument:]
但是,我查看了苹果的 NSMethodSignature 文档(http://bit.ly/1tGR8zt)
NSMethodSignature 对象记录方法的参数和返回值的 …