Mik*_*e D 2 iphone objective-c
我试图复制一个传递给如下方法的字符串:
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
NSLog( @"elementName, %@: %i", elementName, [elementName retainCount] ); // rc = 2
if ( currenttag )
[currenttag release];
NSLog( @"currenttag: %i", [currenttag retainCount] ); // rc = 0
//currenttag = [[NSString alloc] initWithString:elementName]; // track current element
[self setCurrenttag:elementName];
NSLog( @"currenttag: %i", [currenttag retainCount] ); // rc = 3
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
setCurrenttag是一个综合存取器(@property (copy)).我的理解是,这将创建一个全新的对象,而不仅仅是一个引用elementName.上面的行为好像它保持对引用elementName和调用retain.注释掉的代码显示了相同的行为.
这些方法正在实现NSXMLParserDelegate协议,但我确实需要跟踪某些元素名称(但不是全部).
NSString在iphone上有没有关于对象和内存管理的东西.
另外,作为参考,我在带有XCode 3.6的iPhone模拟器上运行它.
对于像NSString这样的不可变基础类,copy只需保留该对象即可.复制已知为不可变的对象将浪费资源,因此不会发生.这在NSCopying协议的文档中有所暗示.实施该协议的其中一个选择是:
- 通过保留原始而不是在类及其内容不可变时创建新副本来实现NSCopying
通常,如果您知道某个类的实例将是不可变的,那么保留目标对象而不是复制它是完全有效的.
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |