使用类,NSMutableString和Release

时间:2015-11-10 16:34:38

标签: class objective-c++

我在访问和清除其他类中的NSMutableString指针时遇到问题。在Overlay.mm中,我将构建的字符串更新为Wrapper.mm需要发布到Web服务的文档。

我需要帮助使用Overlay方法的语法。另外,我还不清楚是否需要在Overlay中创建一个getter和setter,如果我需要合成字符串,或者是什么。

简化代码:

Overlay.h

class Overlay : public BundleOverlay {

public:

Overlay(void);

    void ReleaseText();
    NSMutableString *StringBuilderDoc;

etc...

Overlay.mm

Overlay::Overlay(void)
{
    StringBuilderDoc = [[NSMutableString alloc]init];
};

void Overlay::ReleaseText(){
     [StringBuilderDoc release];
}

void Overlay::UpdateText(BundleOverlayTracker *t)
{
[StringBuilderDoc appendString: [NSString stringWithFormat: @"%s %ld %f\r", t[0], t[1], t[2];
}

Wrapper.mm

etc...
NSString *post = [NSString stringWithFormat:@"%@ etc...", StringBuilderDoc];

[Overlay ReleaseText];

这就是问题所在。我想阅读StringBuilderDoc var并在post var。

中做更多的工作

然后,我想清除并释放它,因为我已经完成了它。

1 个答案:

答案 0 :(得分:1)

此调用无效,因为它是C ++方法,而不是Objective-C方法(并且它也不是类方法):

[Overlay ReleaseText];

相反,您只需将其称为:

overlayInstance.ReleaseText();     // Where overlayInstance is the Overlay instance

(但请注意,将此方法命名为releaseText())是常规的。

您还应该将值设置为nil以避免双重释放对象(向nil发送消息会自动忽略Objective-C):

void Overlay::ReleaseText(){
     [StringBuilderDoc release];     // Remove this if using ARC
     StringBuilderDoc = nil;
}

您还需要在类析构函数中添加对ReleaseText()的调用。

命名该实例变量也是常规的:

_stringBuilderDoc

补充说明:我假设您没有使用ARC;如果您是编译器会尽快告诉您有关release的无效使用,而是您可以删除对release的调用,并将其设置为nil以释放它。