【问题标题】:LoadXMLByUrl: Method returns an Objective-C object with a +1 retain countLoadXMLByUrl:方法返回一个具有 +1 保留计数的 Objective-C 对象
【发布时间】:2011-11-24 13:38:11
【问题描述】:
@synthesize xmlcont;

- (void)viewDidLoad {
/* Line 35 */ xmlcont =[[pxmlC alloc]loadXMLByUrl:@"http://openmenu.com/api/v1/restaurant?key=57d3661c-0fa1-11e1-80ac-00163eeae34c&name=rusc"];
for (pxml *t in [xmlcont xmlArray]) {
    NSLog(@"Name: %@ %d",[t rname],[[xmlcont xmlArray] indexOfObject:t] );
}
NSLog(@"abc");
[super viewDidLoad];}

- (void)dealloc {
    [xmlcont release];
    [super dealloc];
}

但是 Build ans Analyze 说

在第 35 行分配的对象的潜在泄漏

当我点击“>”时,它说:

方法返回一个具有 +1 保留计数的 Objective-C 对象(拥有 参考)

在此之后不再引用在第 35 行分配的对象 并且保留计数为 +1(对象泄露)

像这样: http://www.freeimagehosting.net/newuploads/af6b3.png

我不明白... 请帮我解决它。 非常感谢你^^

【问题讨论】:

    标签: objective-c xml xcode


    【解决方案1】:

    如果你的属性被声明为retain,你应该通过访问器和自动释放来设置它

    self.xmlcont = [[[pxmlC alloc] loadXMLByUrl:@"http://openmenu.com/api/v1/restaurant?key=57d3661c-0fa1-11e1-80ac-00163eeae34c&name=rusc"] autorelease];
    

    您还应该遵循命名约定并使用 initinit... 初始化程序。如果有的话,你应该打电话给init,而不是打电话给loadXMLByUrl

    【讨论】:

    【解决方案2】:

    我认为分析器被命名错误的初始化程序弄糊涂了。初始化器名称必须以init… 开头,以便分析器知道该方法将返回接收器。将您的 loadXMLByUrl 初始化程序重命名为 initWithContentsOfURL 看看是否有帮助。

    【讨论】:

    • 非常感谢。但我在 .h 和 .m 文件中定义了 -(id)loadXMLByUrl:(NSString *)urlString
    • 您必须将方法从loadXMLByUrl重命名initWithContentsOfURL,这应该会有所帮助。
    • 这是我的 (id)loadXML... [freeimagehosting.net/newuploads/c2fa2.png ] 我用过initWithContentOfURL
    • 我们彼此不了解。您的类有一个名为loadXML 的初始化程序。这是一个坏名字,因为它混淆了代码分析器。您必须将方法重命名initWithContentsOfURL或以“init”开头的任何其他内容。
    • 看。如果您想摆脱分析器警告,请尝试重命名该方法。我只能说。
    猜你喜欢
    • 2011-12-15
    • 2023-03-26
    • 1970-01-01
    • 2011-04-02
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多