使用 类、NSMutableString 和 Release

Working with classes, NSMutableString, and Release

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

我需要有关点击覆盖方法的语法方面的帮助。还有,不清楚我是否需​​要在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.

中做更多工作

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

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

[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;
}

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

此外,命名该实例变量也是约定俗成的:

_stringBuilderDoc

进一步说明:我假设您没有使用 ARC;如果你是,编译器会足够快地告诉你 release 的无效使用,相反你可以删除对 release 的调用并将其设置为 nil 以释放它。