nsxmlparser中的点自我表示法

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];
    }
}

最佳答案

bar = self.foo;


只是的简写

bar = [self foo];




self.foo = bar;


是的简写

[self setFoo:bar];


就内存管理而言,这仅意味着将调用特定的setter和getter,而

foo = bar


会简单地分配值(即通常只是复制指针)。

假设您有保留的财产

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


然后二传手可能看起来像

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


现在,如果您

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


一切都会好起来的,因为先前分配的对象已释放,而新对象被正确保留。如果您只是做了一个

foo = newFoo;


如果不考虑释放旧对象并保留新对象,则可能是内存泄漏或更糟……

关于iphone - nsxmlparser中的点自我表示法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8582074/

10-13 09:21