如何释放方法中生成的对象?

windergao 2017-07-26 07:26:27
新建一个打印类 初始化代码如下
@implementation Print
-(id)init{
self = [super init];
if (self) {

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(print) userInfo:nil repeats:YES];
//每隔一秒 打印一次
}
}
-(void)print{
NSLog(@"=========================");
}

@end

@implementation PrintViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self AutoPrint];
}
-(void)AutoPrint{
Print *p = [[Print alloc] init];
//生成P对象
}

-(void)StopPrint{

// 想要在这里释放p对象,从内存里清除,代码应该怎么写?
}
@end
...全文
683 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaocc114 2017-10-14
  • 打赏
  • 举报
回复
这个看不懂啊,可以多试试
「已注销」 2017-10-12
  • 打赏
  • 举报
回复
定时器一直执行,对象肯定还在,如果想释放对象,只有先停止掉定时器,然后置空定时器
不担心 2017-08-11
  • 打赏
  • 举报
回复
很多人都会忽略这个细节,NSTimer会持有target 所以你的这句语句 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(print) userInfo:nil repeats:YES]; 会让NSTimer对self的计数器加1,所以你的p不会被释放,直到你的NSTimer计时器被显式的设置无效. 也就是你要调用[NSTimer invalidate]才会释放p,就象5楼说的
czrjdl 2017-08-10
  • 打赏
  • 举报
回复
你的PRINT类声明在AutoPrint函数中了,还怎么释放? 把PRINT类声明在PrintViewController中, 在StopPrint中把p置为NULL不就行了
windergao 2017-08-09
  • 打赏
  • 举报
回复
我的目的是只要对象在 就要一直重复打印。 在创建对象的这个类中,结束对象并且释放。难道是创建对象的时候用了定时器,所以这个对象就一直存在?
_zhangJ 2017-08-03
  • 打赏
  • 举报
回复
或者你创建一个实力变量的NSTimer 在Stop里面执行timer的invalidate操作
_zhangJ 2017-08-03
  • 打赏
  • 举报
回复
repeats:改成NO试试
  • 打赏
  • 举报
回复
方法中的对象会在方法执行完毕之后,自动释放的
windergao 2017-07-27
  • 打赏
  • 举报
回复
我的理解是 p销毁了 init里的NSLog方法就不执行了吧。事实是NSLog 会一直输出。是不是说明p一直存在的。 而且,创建很多个p对象后,系统会变卡。 我想解决p可以销毁,系统不会卡的问题。
windergao 2017-07-27
  • 打赏
  • 举报
回复
执行上面的代码,startPrint调用一次,会一直打印1111。也就是说p是一直存在的啊。 想要停止,应该怎么弄?

29,027

社区成员

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

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