Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Iphone 在iOS上,如果UIGestureRecognitor是抽象类,为什么可以实例化它?_Iphone_Objective C_Ios_Abstract Class - Fatal编程技术网

Iphone 在iOS上,如果UIGestureRecognitor是抽象类,为什么可以实例化它?

Iphone 在iOS上,如果UIGestureRecognitor是抽象类,为什么可以实例化它?,iphone,objective-c,ios,abstract-class,Iphone,Objective C,Ios,Abstract Class,以下代码使用: 可以实际编译和运行。我认为不能被实例化 抽象类不是Objective-C中的语言特性(例如,与Java不同),因此编译器无法强制执行它 当一个类在文档中被标记为抽象时,它只是一个如何使用它的提示,但运行时和编译器都不会阻止您直接实例化它 《Objective-C编程语言指南》中关于的章节实际上指出,NSView是一个抽象类的示例,您有时可以不使用子类,因此其概念不像其他语言/框架中那样严格。抽象类不是Objective-C中的语言功能(例如,与Java不同),因此编译器无法强制执

以下代码使用:


可以实际编译和运行。我认为不能被实例化

抽象类不是Objective-C中的语言特性(例如,与Java不同),因此编译器无法强制执行它

当一个类在文档中被标记为抽象时,它只是一个如何使用它的提示,但运行时和编译器都不会阻止您直接实例化它


《Objective-C编程语言指南》中关于的章节实际上指出,
NSView
是一个抽象类的示例,您有时可以不使用子类,因此其概念不像其他语言/框架中那样严格。

抽象类不是Objective-C中的语言功能(例如,与Java不同),因此编译器无法强制执行它

当一个类在文档中被标记为抽象时,它只是一个如何使用它的提示,但运行时和编译器都不会阻止您直接实例化它


Objective-C编程语言指南中关于的部分实际上指出,
NSView
是一个抽象类的例子,您有时可以不使用子类,因此这个概念本身不像其他语言/框架那样严格。

感谢omz的回答。这是Apple文档中的相关摘录:

抽象类

某些类的设计只是为了或主要是为了使其他类能够 这些抽象类对方法和实例进行分组 可以由多个子类使用到公共类中的变量 抽象类本身通常是不完整的,但是 包含有用的代码,可减少its的实现负担 子类。(因为抽象类必须有子类才能 它们很有用,有时也称为抽象超类。)

与其他一些语言不同,Objective-C没有要标记的语法 类作为抽象类,也不会阻止您创建实例 抽象类的

NSObject类是中抽象类的典型示例 Cocoa。您从未在应用程序中使用NSObject类的实例 应用程序它不会有任何好处,它将是一个通用的 具有不做任何特殊事情的能力的对象

另一方面,NSView类提供了 抽象类,您可能偶尔会使用其实例 直接的

抽象类通常包含帮助定义结构的代码 应用程序。当您创建这些类的子类时 您的新类中的任意一个都可以轻松地融入到应用程序结构中 并自动处理其他对象


感谢omz的回答。这是苹果文档的相关摘录:

抽象类

某些类的设计只是为了或主要是为了使其他类能够 这些抽象类对方法和实例进行分组 可以由多个子类使用到公共类中的变量 抽象类本身通常是不完整的,但是 包含有用的代码,可减少its的实现负担 子类。(因为抽象类必须有子类才能 它们很有用,有时也称为抽象超类。)

与其他一些语言不同,Objective-C没有要标记的语法 类作为抽象类,也不会阻止您创建实例 抽象类的

NSObject类是中抽象类的典型示例 Cocoa。您从未在应用程序中使用NSObject类的实例 应用程序它不会有任何好处,它将是一个通用的 具有不做任何特殊事情的能力的对象

另一方面,NSView类提供了 抽象类,您可能偶尔会使用其实例 直接的

抽象类通常包含帮助定义结构的代码 应用程序。当您创建这些类的子类时 您的新类中的任意一个都可以轻松地融入到应用程序结构中 并自动处理其他对象

UIGestureRecognizer *gestureRecog = [[UIGestureRecognizer alloc] 
                                         initWithTarget:self 
                                         action:@selector(handletap:)];

[self.view addGestureRecognizer:gestureRecog];