Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Objective c 目标C-2简单问题_Objective C_Class - Fatal编程技术网

Objective c 目标C-2简单问题

Objective c 目标C-2简单问题,objective-c,class,Objective C,Class,使用 @class&#导入?我遇到了一个情况 在那里我得到了一个构建错误, 解决方法是使用@class 而不是#导入来导入我的 班级 非原子是什么意思?我什么时候去 使用非原子定义属性, 我什么时候才能避免呢 @class允许您为稍后定义的类创建存根。例如: #define MY_INT 5 x = MY_INT; MyOtherClass.h @class MyClass; @interface MyOtherClass : NSObject { MyClass *myObjec

使用
@class
&
#导入
?我遇到了一个情况 在那里我得到了一个构建错误, 解决方法是使用
@class
而不是
#导入
来导入我的 班级

  • 非原子是什么意思?我什么时候去 使用非原子定义属性, 我什么时候才能避免呢


  • @class
    允许您为稍后定义的类创建存根。例如:

    #define MY_INT 5
    
    x = MY_INT;
    
    MyOtherClass.h

    @class MyClass;
    
    @interface MyOtherClass : NSObject {
        MyClass *myObject;
    }
    
    MyOtherClass.m

    #include "MyOtherClass.h"
    
    @interface MyClass : NSObject {
        NSUInteger myInt;
    }
    
    #define
    用于定义将由预处理器替换的字符串。例如:

    #define MY_INT 5
    
    x = MY_INT;
    
    将由预处理器重写为:

    x = 5;
    

    Scott G已经逐字回答了您的问题,但如果如Adam Ko所说,您的意思是#导入,那么答案将是@class不会导入该类,而只是告诉编译器稍后将提供一个具有给定名称的类(在我记得的所谓“延迟绑定”中)

    @class主要在两个类相互引用时使用,因此它们不能相互导入(这可能是编译器错误的根源)


    但是,@class有一个明确的限制,即编译器不允许您引用已定义类的任何方法或属性。但是通常您只需要在implementation.m文件中使用它们,在那里您可以毫无问题地导入类

    原子属性是保证getter返回有效、有意义的值的属性,即使在另一个线程上同时调用了相关setter。这在处理方面比非原子属性花费更多,但对于多线程代码来说更安全。

    如果使用原子属性(默认设置),它会使代码完全线程安全


    这一魔法需要付出一些代价,这就是为什么你经常会看到关键字非原子的,如果人们真的不关心线程安全,就使用它来加快代码的速度。

    我认为通常最好的做法是单独提问。至于第二个问题,请看:我认为你说的是“导入”,而不是“定义”?