peterchen149
peterchen149
2015-03-16 02:20
采纳率: 15.4%
浏览 4.3k
已采纳

为什么要把这些.h文件的内容写到.m文件里?

现在在看别人的代码 发现他们都把h文件的内容写到m文件里
比如:

 @interface MyTreeViewController ()
{
    NSArray *tree;
}
@end

@implementation MyTreeViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

为什么要这么做?为什么不直接在头文件里写
@property(strong,nonatomic)NSArray *tree;
??

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • imanapple
    白马斩辰 2015-03-19 13:40
    已采纳

    @interface MyTreeViewController () 是一个特殊分类,叫做 匿名分类。顾名思义,它没有分类名

    在匿名分类中可以声明变量,这些变量都默认是@private私有变量,即使放在.h中仍然如此。

    之所以放在.m中,是因为这是常见写法,一些不希望外部访问的@property、方法、变量,都可以使用分类的形式声明在.m中,这样就可以屏蔽外部访问。

    具体可以参考 变量声明的不同形式,作用域等

    点赞 评论
  • chlsix
    chlsix 2015-03-16 03:45

    不需要外部调用的时候就在.m中定义就行了

    点赞 评论
  • chentoo
    chentoo 2015-03-19 07:23

    .m中对外部隐藏内部实现,外部不可访问自己的属性或者方法。

    而在.h中应该对外展现必要的方法接口。方便调用。

    点赞 评论
  • u013531246
    Tenney丶 2015-03-19 09:03

    写在.h中的是公用的,可以直接调用,也可以通过KVC调用,.m中的是私有的,外部类无法调用到.m中的参数。有些关键参数、属性不希望暴露给外界,就会写在.m中。如果打包成.a文件或者framework,别人使用的时候就看不到了。

    点赞 评论
  • GAO_YAN_1991
    GAO_YAN_1991 2015-04-02 11:42

    这是oc中扩充类的一种方式,叫做延展(Extension)主要作用是管理私有的方法和实例变量

    点赞 评论
  • darongzi1314
    王大锤子呦 2015-04-10 08:41

    @interface写在.m文件可以对外隐藏属性,别的类就访问不到

    点赞 评论
  • q125902788
    q125902788 2015-11-14 14:14

    怎样在main.m里面实现啊?

    点赞 评论

相关推荐