在OBC-C中有类似于C++的构造函数,析构函数么?

edgeperson 2012-03-07 09:48:33
首先有一个类

@interface ClsDemo1 : NSObject
{
NSString* str;
}
......
@end

在Object-C中貌似没有找到类似于C++ (构造函数/析构函数)的东西
那么....NSString* str 应该在哪儿申请内存,在哪儿释放呢???
抱歉,才从C++的转过来,还没适应.
尝试过
-(ClsDemo1*)init
{
if(self=[super init])
{
str=[[NSString alloc] init];
}
return self;
}

-(void)release
{
[str release];
[super release];
}
呃,只是凭感觉写的,总觉得哪儿有什么不对.
求指导.
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bannings 2012-03-07
  • 打赏
  • 举报
回复
不会的, copy会重新分配一块内存
edgeperson 2012-03-07
  • 打赏
  • 举报
回复
这样的话,
如果是在init中分配自己的内存的话
ClsDemo1* A=[[ClsDemo1 alloc]init]; //A:retainCount=1;
ClsDemo1* B=[A copy];//这一步后A.str 和 B.str 貌似指向了同一片内存空间?
[A release]//A:retainCount=0,执行dealloc,str也被释放了,B.str变空指针?

不知道我的想法有没有错
Snake_Jay 2012-03-07
  • 打赏
  • 举报
回复

-(void)release
{
[str release];
[super release];
}


这个不需要你重写,你在

-(void) dealloc {
[str release]; str = nil;
[super dealloc];
}

这里写即可。

可以相当于C++中的构造和析构。
相奇 2012-03-07
  • 打赏
  • 举报
回复
不太记得了。。。

我在XOCODE编译的时候,如果类中有成员变量是 string,一般都不为它开辟空间。。。。
-dealloc{}中,也不会去释放掉它。感觉它会在内存释放池里释放掉。系统自带的帮我autorelease掉了

如果使用临时变量 或者一定把成员变量 【nsstring alloc】,那么就要去release掉

还有,[nsobject COPY]会开辟空间 或 retaincount +1,这个不太记得了
相奇 2012-03-07
  • 打赏
  • 举报
回复
不太记得了。。。

我在XOCODE编译的时候,如果类中有成员变量是 string,一般都不为它开辟空间。。。。
-dealloc{}中,也不会去释放掉它。感觉它会在内存释放池里释放掉。系统自带的帮我autorelease掉了

如果使用临时变量 或者一定把成员变量 【nsstring alloc】,那么就要去release掉

还有,[nsobject COPY]会开辟空间 或 retaincount +1,这个不太记得了

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧