我不是一个全职的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。这两种不同的方式有什么区别吗?
1条答案
按热度按时间osh3o9ms1#
示例变量的目的是让它在 * 以后 *,用于一些 * 其他 * 方法或(如果通过访问器公开)供其他对象访问。
menuHeader
参数的使用纯粹是这个init
方法的局部--你就不应该使用示例变量,因为它是没有意义的。menuHeader
参数的值为 persist,以便稍后由其他方法访问-那么你 * 应该 * 使用示例变量,因为传入的menuHeader
参数是纯本地的,当init
方法完成时,它将死亡(超出范围)。通常,编写自己的
init
方法的原因正是为了接受参数并将其分配给示例变量,这就是为什么我们经常看到这种模式。