Objective c 什么';将@interface放入.m文件的逻辑是什么?

Objective c 什么';将@interface放入.m文件的逻辑是什么?,objective-c,Objective C,可能重复: 我见过这样的代码: // In Header.h @interface Header{} @end // In Header.m @interface Header() @end 我的问题是: 把它放在两个文件里有什么区别 为什么将{}放在“.h”文件中的类名后面,为什么将“()”放在“.m”文件中 是一个 对于现代编译器来说,这是一种很好的方法,可以对方法、IVAR和属性进行减量,仅用于MyClass类中的私有用途 类扩展必须在主实现文件中声明(而不是在类别中) 因此,您可

可能重复:

我见过这样的代码:

// In Header.h
@interface Header{}
@end

// In Header.m
@interface Header()
@end
我的问题是:

  • 把它放在两个文件里有什么区别
  • 为什么将{}放在“.h”文件中的类名后面,为什么将“()”放在“.m”文件中
  • 是一个

    对于现代编译器来说,这是一种很好的方法,可以对方法、IVAR和属性进行减量,仅用于MyClass类中的私有用途

    类扩展必须在主实现文件中声明(而不是在类别中)


    因此,您可以从头文件中隐藏实现细节,它们是私有的。

    这已成为为给定类声明“私有”属性/方法的常见做法。通过在.m内的匿名类扩展中声明它们,这些属性/方法不会暴露给消费对象。

    谢谢,这为我解决了一个大难题。你还可以创建实现属性,我发现它们比类扩展更有用。要在扩展中使用IVAR,你必须使用llvm 3+。GCC不知道这一点syntax@RichardJ.RossIII-实现属性是什么?还有一件事,我看到过这样做的代码,接口头{}属性(非原子,只读)boolsessiondidexpire;结束,然后在.m文件中,属性(非原子,读写)BOOL sessionDidExpire;这是什么?它是一个公共只读属性,而从类内部u也可以写入它-非常方便。
    @interface MyClass(){
        NSInteger aInt;
    
    }
    @property(nonatomic,strong) NSString *name;
    @end