编辑:实际上,我不明白将数组添加到数组不需要“setter”,但实际上是“getter”,所以使用“self”并不重要。
你能告诉我为什么在这段代码中我们有时使用“自我”。有时候我们不这样做:如果我们有一条“消息”要发送到属性,我们通常使用“self。”,但是在这里的locationManager委托中,我们不使用它:
- (void)viewDidLoad {
self.locationMeasurements = [NSMutableArray array];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
[locationMeasurements addObject:newLocation];
- (void)viewDidUnload {
locationDetailViewController = nil;
}
- (void)reset {
[self.locationMeasurements removeAllObjects];
}
感谢您的帮助
保
答案 0 :(得分:1)
当你使用self时,你会通过访问器方法,从而在分配时利用非原子(或原子)等属性属性,或者在分配时复制,保留,分配。
如果不使用self,则直接访问变量。
示例:
@interface X : NSObject
{
NSObject * anObject;
}
@property(nonatomic,retain) NSObject * anObject;
self.anObject = [[NSObject alloc]init]autorelease];
会将对象保留在属性
中anobject = [[NSObject alloc]init]autorelease];
不会保留它,该对象将在稍后发布。
自我。是语法糖:
-(NSObject *)anObject;
and
-(void)setAnObject:(NSObject *)other;
属性声明中的属性定义了如何在幕后实现这些方法
在viewDidLoad中的示例代码中自我。可能需要确保在分配后保留数组。但是在“重置”中可能不需要它,因为你只是操纵对象本身而不是对属性的赋值(除非你处理多线程和原子访问器)。
有一点需要注意的是,如果你在ViewDidLoad(MutableArray)中创建一些东西,你应该在viewDidUnload中销毁它(self.locationMeasurements = nil;)
答案 1 :(得分:0)
使用self.
时,您可以获得@property
声明的所有好处。这包括内存管理(复制,保留,分配和释放)和原子性。当不使用self并且存在具有相同名称的实例变量时,您将失去优势,这在分配变量时尤其有效。例如,如果viewDidUnload
被声明为locationDetailViewController
或copy
,则retain
会导致泄密,因为您没有使用自我。