2012-01-06 37 views
-5
self.list = playList; 

- (id)init { 
    if (self = [super init]) { 
     [self createDemoData]; 
    } 
    return self; 
} 

static NSString *CellIdentifier = @"CellIdentifier"; 

你好,我仍然不知道什么时候使用这两个关键字,特别是静态的。什么时候使用静态变量和自我关键字

+2

你试过Google吗?我听说这样做非常有效。 – Emil 2012-01-06 23:36:32

+3

你被低估了,因为你问了一个关于两个广泛主题的非常模糊的问题。没有办法简单回答这样一个开放式问题。如果你编辑你的问题,并进一步澄清你的问题是什么,你可能会得到更好的帮助。关于自我和静态(它们根本不相互关联......)你无法理解的是什么? – 2012-01-06 23:52:37

回答

4

只是为了你指出正确的方向:

静态https://stackoverflow.com/a/1250088/267892

问题描述

  1. 您希望您的ClassA的有一个ClassB类变量。
  2. 您正在使用Objective-C作为编程语言。
  3. Objective-C不像C++那样支持类变量。

一个备选

模拟使用Objective-C类变量行为设有

  1. 申报/所述classA.m内定义一个静态变量所以这将是仅访问classA方法(以及你把 放在classA.m中的所有东西)。

  2. 覆盖NSObject的初始化类方法,初始化一个静态变量与一个ClassB的实例。

  3. 你会想知道为什么要覆盖NSObject的初始化方法。有关此方法的Apple文档有 答案:“运行时恰好在该类之前发送一个程序 中的每个类的初始化或任何继承 的类从程序中发送它的第一条消息。因此,如果不使用类,则永远不会调用 方法。)“。

  4. 随意使用任何ClassA类/实例方法中的静态变量。

https://stackoverflow.com/a/2386015/267892

采用自主导致你的类的 “二传手”,此变量被调用, 而不是直接改变了伊娃。

self.mainViewController = aController; 

等同于:

[self setMainViewController:aController]; 

在另一方面:

mainViewController = aController; 

只是直接改变mainViewController实例变量, 跳过可能被内置到 任何额外的代码UIApplication的setMainViewController方法,比如释放旧的 对象,保留新对象,upd处理内部变量等。

+0

它也很好地知道你可以保护你的实例变量,如果你声明它们是私人的,只需在你的.h中定义你的属性。在你的实现中,你将你的属性定义为读写。如果使用下划线_Example编写实例变量,并使用非下划线属性@synthesize示例= _Example进行合成,则可以实现更多保护。一个使用你的班级的人必须通过你的自定义setter和你的自定义getter,它提供了很多保护。顺便说一句,封装有更多的方法。比如仅在您的实现中声明您的实例。 – 2012-01-07 00:33:25

相关问题