使用 类、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
以释放它。
我在访问和清除其他 类 中的 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
以释放它。