【问题标题】:what does @class do in iOS 4 development?@class 在 iOS 4 开发中做了什么?
【发布时间】:2011-10-15 20:59:53
【问题描述】:

做起来有什么区别

@class MyViewController;

而不是将 .h 正常导入到 appdelegate.h 中

#import "MyViewController.h"

我最近看到了一些使用@class 方式的示例,想知道是否有任何区别。

谢谢。

【问题讨论】:

标签: objective-c ios4


【解决方案1】:

@class 允许您声明一个符号是一个 Objective-c 类名,而无需#import 定义该类的头文件。

你可以在你只需要定义类名来声明指向类的指针或类的方法参数的情况下使用它,并且不需要访问类中的任何方法、字段或属性.

与#import 相比,它节省了极少的编译时间,并且有时有助于避免混乱的包含循环问题。

[而且,正如 rjstelling 所指出的,它有时在您有交错声明并且您需要“前向声明”某些东西的情况下很有用。]

【讨论】:

    【解决方案2】:

    有很大的不同。

    @class MyViewController;
    

    是对象MyViewController 的前向声明。当你只需要告诉编译器一个对象类型而不需要包含头文件时使用它。

    但是,如果您需要创建这种类型的对象并在其上调用方法,则需要:

    #import "MyViewController.h"
    

    但通常这是在.m 文件中完成的。

    前向声明的另一个用途是在与使用它的对象相同的头文件中定义@protocol

    @protocol MyProtocolDelegate; //forward declaration
    
    @interface MyObject {
        id<MyProtocolDelegate> delegate;
        ...
    }
    ...
    @end
    
    @protocol MyProtocolDelegate
        ... //protocol definition
    @end
    

    在上面的例子中,编译器在编译MyObject对象之前需要知道@protocol MyProtocolDelegate是有效的。

    只需将协议定义移到MyObject 定义之上也可以。

    【讨论】:

      猜你喜欢
      • 2013-11-13
      • 2010-09-08
      • 1970-01-01
      • 2019-10-21
      • 2017-02-27
      • 2012-11-22
      • 2021-05-15
      • 2018-09-14
      • 2013-04-24
      相关资源
      最近更新 更多