iphone - nsxmlparser 中的点自记法

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

最佳答案

bar = self.foo;

只是

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

self.foo = bar;

的简写
[self setFoo:bar];

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

foo = bar

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

假设你有一个保留的属性(property)

@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;

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

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

相关文章:

iOS 应用程序需要 arm64 吗?

objective-c - 如何处理NSXMLParser中另一个标签内的标签

iphone - 我的 UITextView 没有调用任何委托(delegate)方法

iphone - 使用 writeImageToSavedPhotosAlbum 将 UIImage 保存到相册

iphone - 如何隐藏 UISlider 轨道?

ios - 如何根据不同的形状拼贴图像

ios - 即使在生成 .gcda 和 .gcno 文件后,也未使用 coverstory 在 xcode 4.6 中处理代码覆盖率

iphone - 在我的 View Controller.m 上填充 Dealloc

ios - 如何从雅虎天气预报 XML 文档中获取图像 url?

iOS NSXMLParser - 一致地从 XML 标签派生图像源 URL