我在访问和清除其他类中的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。
中做更多的工作然后,我想清除并释放它,因为我已经完成了它。
答案 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
以释放它。