我使用Xcode 4.3中的"Convert to Objective C ARC"选项将Xcode 4.0中启动的项目转换为使用ARC.在修复该工具发现的错误之后,我进入了迁移工具已删除所有发布消息以及在我的属性声明中保留属性的过程.所以现在我的所有属性都只有(非原子)属性.通过阅读文档,我仍然没有明确的答案.
所以我的问题是:如果在属性声明中省略了关于setter语义的关键字(strong,weak,retain,assign),使用ARC时属性的默认属性是什么?
我在文档中发现默认属性属性是assign.但是,他们还说现在ivars的默认属性,如果省略它,就很强大.
为了更好地解释我的问题,这是一个例子.我头文件我们有声明:
@property (nonatomic) MyClass *objectToUse;
Run Code Online (Sandbox Code Playgroud)
在我们的实施中,我们只有
@synthesize objectToUse;
Run Code Online (Sandbox Code Playgroud)
如果我们在内部写一些方法:
self.objectToUse = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)
我们创建了一个强大的(保留)或弱(分配)参考?如果我们改写
objectToUse = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)
通过使用ivar,我们改变了有关对象保留政策的情况吗?在我看来,现在使用ARC,使用属性进行内存管理的最佳实践不再是相同的做法.
我正在创建一个iOS应用程序,我在Objective C中使用GDataXML库进行xml解析.
我有以下xml(我得到的肥皂响应):
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<MakeRequestResponse xmlns="http://tempuri.org/">
<MakeRequestResult>SOMERANDOMDATAHERE012912033905345346</MakeRequestResult>
</MakeRequestResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是:
当我像这样编写给定xml的xpath表达式时,我得到了MakeRequestResponse节点:
NSArray *listOfNodes = [[responseDocument rootElement] nodesForXPath:@"soap:Body/*" error:&error];
Run Code Online (Sandbox Code Playgroud)
但是,当我编写实际节点名称时,我无法获取此节点或下面的任何子节点:
NSArray *listOfNodes = [[responseDocument rootElement] nodesForXPath:@"soap:Body/MakeRequestResponse" error:&error];
Run Code Online (Sandbox Code Playgroud)
我不确定这里有什么问题.它可能是命名空间相关的问题吗?