问题描述
- 为什么要把这些.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;
??
解决方案
@interface MyTreeViewController () 是一个特殊分类,叫做 匿名分类。顾名思义,它没有分类名
在匿名分类中可以声明变量,这些变量都默认是@private私有变量,即使放在.h中仍然如此。
之所以放在.m中,是因为这是常见写法,一些不希望外部访问的@property、方法、变量,都可以使用分类的形式声明在.m中,这样就可以屏蔽外部访问。
具体可以参考 变量声明的不同形式,作用域等
解决方案二:
这是oc中扩充类的一种方式,叫做延展(Extension)主要作用是管理私有的方法和实例变量
解决方案三:
不需要外部调用的时候就在.m中定义就行了
解决方案四:
.m中对外部隐藏内部实现,外部不可访问自己的属性或者方法。
而在.h中应该对外展现必要的方法接口。方便调用。
解决方案五:
写在.h中的是公用的,可以直接调用,也可以通过KVC调用,.m中的是私有的,外部类无法调用到.m中的参数。有些关键参数、属性不希望暴露给外界,就会写在.m中。如果打包成.a文件或者framework,别人使用的时候就看不到了。
解决方案六:
@interface写在.m文件可以对外隐藏属性,别的类就访问不到
解决方案七:
怎样在main.m里面实现啊?
时间: 2024-10-05 01:04:30