我不是全职 iOS 开发人员,所以这个问题的答案可能非常明显。我有一个名为 MenuHeader 的模型,并创建了一个名为 MenuHeaderView 的自定义 UIView。我有这样的方法:
在 MenuHeaderView.m
-(id) initWithFrame:(CGRect)frame menuHeader:(MenuHeader *)menuHeader
{
self = [self initWithFrame:frame];
if (self) {
_menuHeader = menuHeader; // <- here's the part I'm asking about
NSLog(@"here is menu header depth: %i", _menuHeader.depth);
NSLog(@"here is my header depth as argument %@", menuHeader.depth);
一般情况下,我一般会创建一个名为_menuHeader的实例变量,在initWithFrame中赋值即可。我想我可以只处理参数 menuHeader 但我总是前者这样做。这是不必要的吗?是否有任何理由只使用 menuHeader 参数?我认为这只是风格上的,我更喜欢这个想法是我们正在展示的模型的本地 instanceVariable。两种不同的方式有什么区别吗?
实例变量的目的是在later周围使用它,用于某些other方法或(如果通过访问器公开)供其他对象访问。
如果你不需要它 - 也就是说,如果你使用传入的
menuHeader
参数纯粹是这个 init
方法的本地 - 你应该 not 使用实例变量,因为它毫无意义。 但是,反过来——如果你需要这个传入的
menuHeader
参数值到 persist 以便稍后通过其他方法访问 - 那么你 should 使用实例变量,因为传入的 menuHeader
参数是纯本地的,当 init
方法完成时将死亡(超出范围)。通常,编写自己的
init
方法的真正原因正是为了接受参数并将其分配给实例变量,这就是为什么我们经常看到这种模式。