作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚阅读了一个关于 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/
我是一名优秀的程序员,十分优秀!