ios关于点击事件selector传参的问题,看似简单却容易混淆(已解决)

本文深入探讨了在Objective-C中使用Selector时,如何在NSTimer调用的方法内正确获取调用者对象。通过实例分析,解释了在使用Selector传递NSTimer时,为何无法直接通过self获取控制器实例,以及如何解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用selector时经常思考的问题,

给UIButton 添加点击事件,可以在selector后加“:”将button作为参数传入方法中,

今天用

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(rotateAction:) userInfo:nil repeats:NO];

写了一个方法

#pragma mark - rotateAction

- (void)rotateAction:(ViewController *)controller{

//    UIView * view = [controller.view.subviews lastObject];

    NSLog(@"%@",controller);

//    view.backgroundColor = [UIColor yellowColor];

}


看起来类似的写法却无法获得self(控制器),我分别打印了一下self和controller结果发现地址不一样,所以肯定不是一个对象,我就在思考是为什么,再仔细看打印结果终于发现问题所在

2015-06-21 15:35:22.806 test仿射变换[10698:1998925] <ViewController: 0x7ff64db38a50>

2015-06-21 15:35:23.807 test仿射变换[10698:1998925] <__NSCFTimer: 0x7ff64d8486d0>



显而易见二者不是同一个类,所以selector传入的参数是:点击事件的调用者例如:button,slider,progress,nstimer等等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值