nsxmlparser中的dot self表示法

时间:2011-12-20 21:13:49

标签: iphone ios nsxmlparser

我刚刚在nsxmlparsing上阅读了另一个问题的答案..并且其中有人说你应该使用self。更好的记忆管理的符号...这意味着什么剂量?

如果我把它放进去的话,我就把这个用于初始化我的字典了?它有多大帮助或不帮助?

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{
    if ([elementName isEqualToString:@"Row"]) 
    {
        ICRow = [[NSMutableDictionary alloc] initWithDictionary:attributeDict];
    }
    if ([elementName isEqualToString:@"Rows"]) {
        self.ICRows = [NSMutableArray arrayWithCapacity:8];
    }
}

1 个答案:

答案 0 :(得分:2)

bar = self.foo;

只是

的简写符号
bar = [self foo];

self.foo = bar;

的简写
[self setFoo:bar];

在内存管理方面这只是意味着调用特定的setter和getter ,而

foo = bar

只会分配值(即大部分只是复制指针)。

假设您有保留属性

@property (nonatomic, retain) FooType *foo;
//...
@synthesize foo;

那么setter可能看起来像

- (void) setFoo:(FooType*)x
{
 [x retain];
 [foo release];
 foo = x;
}

现在,如果你做了

FooType *newFoo = [[FooType alloc] init];
[self setFoo:newFoo];
// or self.foo = newFoo 

一切都会好的,因为你之前分配的对象被释放,新对象被正确保留。如果你只是做了一个

foo = newFoo;

没有考虑释放旧的并保留新对象,你会泄漏记忆或更糟......