首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获得NSTimer目标的返回值

作为一个云计算领域的专家,我可以告诉你,NSTimer 是一个 Objective-C 中的类,用于创建定时器并在一定时间间隔后执行特定的代码块。NSTimer 的目标是指定一个接收定时器消息的对象,也就是在指定的时间间隔后执行的代码所属的对象。

要获取 NSTimer 目标的返回值,你可以使用以下方法:

  1. 创建一个定时器并指定目标对象和选择器:
代码语言:objective-c
复制
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                      target:self
                                                    selector:@selector(timerFired:)
                                                    userInfo:nil
                                                     repeats:YES];
  1. 在目标对象中实现选择器方法:
代码语言:objective-c
复制
- (void)timerFired:(NSTimer *)timer {
    // 在这里编写你要执行的代码
}

需要注意的是,NSTimer 的目标对象必须是一个遵循 NSObject 协议的对象,并且在创建定时器时,目标对象必须已经存在。如果目标对象被释放,定时器将不再有效。

总之,NSTimer 是一个非常有用的类,可以帮助你在 Objective-C 中实现定时执行代码的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS RunLoop RunLoop相关类

我们可通过以下方式来获取RunLoop对象: Core Foundation CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象 CFRunLoopGetMain()...; // 获得主线程的RunLoop对象 当然,在Foundation框架下获取RunLoop对象类的方法如下: Foundation [NSRunLoop currentRunLoop]; // 获得当前线程的...RunLoop对象 [NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象 2 CFRunLoopModeRef 系统默认定义了多种运行模式(CFRunLoopModeRef...4 但是当我们拖动Text View滚动时,我们发现:run方法不打印了,也就是说NSTimer不工作了。而当我们松开鼠标的时候,NSTimer就又开始正常工作了。...但当我们松开鼠标的时候,RunLoop就结束UITrackingRunLoopMode模式,又切换回NSDefaultRunLoopMode模式,所以NSTimer就又开始正常工作了。

31430

iOS多线程:『RunLoop』详尽总结RunLoop

我们可通过以下方式来获取RunLoop对象: Core Foundation CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象 CFRunLoopGetMain()...; // 获得主线程的RunLoop对象 当然,在Foundation框架下获取RunLoop对象类的方法如下: Foundation [NSRunLoop currentRunLoop]; // 获得当前线程的...RunLoop对象 [NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象 2.2 CFRunLoopModeRef 系统默认定义了多种运行模式(CFRunLoopModeRef...但是当我们拖动Text View滚动时,我们发现:run方法不打印了,也就是说NSTimer不工作了。而当我们松开鼠标的时候,NSTimer就又开始正常工作了。...但当我们松开鼠标的时候,RunLoop就结束UITrackingRunLoopMode模式,又切换回NSDefaultRunLoopMode模式,所以NSTimer就又开始正常工作了。

2K50

编码篇-ARC下的内存泄漏

** NSTimer的使用** NSTimerNSTimer会对它的target持有强引用,如果NSTimer不释放掉,就会一直持有它的target的强引用,如果这个NSTimer在被target强引用...because its selector is unknow [-Warc-performSelector-leak] 正是由于动态,编译器不知道即将调用的 selector 是什么,不了解方法签名和返回值...,甚至是否有返回值都不懂,所以编译器无法用 ARC 的内存管理规则来判断返回值是否应该释放。...如果把代码的最后一行改成 [object performSelector:selector]; 不创建一个返回值变量测试分析,简直难以想象这里居然会出现内存问题。...所以如果你使用的 selector 有返回值,一定要处理掉 手动释放(置为 nil)。

1.7K20

《Effective Objective-C》干货三部曲(二):规范篇

集合类取下标的字面量语法: NSArray,NSDictionary,NSMutableArray,NSMutableDictionary 的取下标操作也应该尽量使用字面量语法。...对于返回值是布尔值的方法,我们也要注意命名的规范: 获取”是否“的布尔值,应该增加“is”前缀: - isEqualToString: 获取“是否有”的布尔值,应该增加“has”前缀: - hasPrefix...虽然语法上没有快速枚举简洁,但是我们可以获得数组元素对应的序号,字典元素对应的键值,而且,我们还可以随时令遍历终止。...第52条: 别忘了NSTimer会保留其目标对象 在使用NSTimer的时候,NSTimer会生成指向其使用者的引用,而其使用者如果也引用了NSTimer,那么就会生成保留环。...通过给NSTimer增加一个分类就可以解决: #import @interface NSTimer (EOCBlocksSupport) + (NSTimer

79310

Mac UT实践小结

需要针对刷新后的弹幕进行校验,但是由于初始化是单线程,定时器刷新后的结果在原代码里没有回调和通知,初始后就像脱缰的野马,线程内之前获得只能得到初始化时候的弹幕状态。...5、设计case中的难点:多条case同时用NSTimer定时器会发生crash 多条TestCase中都启用了NSTimer定时器,在指定的时间内重复调用以实现循环生成danmu的逻辑,但各TestCase...timer不能同时重复调用,如果在不同case里都启用NSTimer,必须在各自case及时释放。 ?...另外,开发代码需要有足够的可测性,函数返回值要能够校验,且需要更清晰的代码架构和优美的设计模式,来提升可测性,要设计更严谨的接口函数,便于进行校验和有效断言。

97740

《Effective Objective-C》干货三部曲(二):规范篇

集合类取下标的字面量语法: NSArray,NSDictionary,NSMutableArray,NSMutableDictionary 的取下标操作也应该尽量使用字面量语法。...对于返回值是布尔值的方法,我们也要注意命名的规范: 获取”是否“的布尔值,应该增加“is”前缀: - isEqualToString: 获取“是否有”的布尔值,应该增加“has”前缀: - hasPrefix...虽然语法上没有快速枚举简洁,但是我们可以获得数组元素对应的序号,字典元素对应的键值,而且,我们还可以随时令遍历终止。...第52条: 别忘了NSTimer会保留其目标对象 在使用NSTimer的时候,NSTimer会生成指向其使用者的引用,而其使用者如果也引用了NSTimer,那么就会生成保留环。...通过给NSTimer增加一个分类就可以解决: #import @interface NSTimer (EOCBlocksSupport) + (NSTimer

89321

NSRunLoop-iOS中隐藏的大杀器

比如监听点击事件的处理(在所有点击事件之前做一些事情) RunLoop对象 iOS中有2套API来访问和使用RunLoop 一套是Fundation(纯OC的)框架中的 NSRunLoop // 获得当前线程的...RunLoop对象 NSRunLoop currentRunLoop]; // 获得主线程的RunLoop对象 [NSRunLoop mainRunLoop]; 一套是Core Fundation...(纯C语言的)框架中的 CFRunLoopRef // 获得当前线程的RunLoop对象 CFRunLoopGetCurrent(); // 获得主线程的RunLoop对象 CFRunLoopGetMain..., # 默认情况下NSTimer是不会执行的,只有把NSTimer添加到RunLoop中,由RunLoop管理执行 NSTimer * timer = [NSTimer timerWithTimeInterval..., 系统会自动放入当前线程中的currentRunLoop中,并且只能在NSDefaultRunLoop模式下才能触发 NSTimer * timer1 = [NSTimer scheduledTimerWithTimeInterval

1.1K10

iOS开发·RunLoop源码与用法完全解析(输入源,定时源,观察者,线程间通信,端口间通信,NSPort,NSMessagePort,NSMachPort,NSPortMessage)

(); // 获得主线程对应的 runloop对象 CFRunLoopRef maiRunloop = CFRunLoopGetCurrent(); // 获得当前线程对应的runloop对象 3.2...这两个方法实际调用的是同一个方法CFRunLoopRunSpecific,其返回是一个SInt32类型的值,根据返回值,来决定runLoop的运行状况。 4....远程消息端口必须通过名字来获得。在 Cocoa 中这需要你给本地端口指定一个名字,并将名字传递到远程线程以便远程线程可以获得合适的端口对象用于通信。...可能会有两种写法,但是都有上面的问题,下面先看下Timer的两种写法: // 第一种写法 NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target...- (void)timerTest { // 第一种写法 NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self

2.2K20

iOS学习——浅谈RunLoop

Runloop Runloop的创建:主线程Runloop已经创建好了,子线程的runloop需要手动创建 Runloop的生命周期:在第一次获取时创建,在线程结束时销毁 1.5 获取Runloop对象 /*1.获得当前...基本上说的就是NSTimer   NSTimer在实际开发中会出现不准的情况,出现这种情况的主要是NSTimer的初始化有两种方法如下,然后第一种方法会自动添加到当前的RunLoop中,并且RunLoop...(^)(NSTimer *timer))block; + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL...一个mode里面可以添加多个NSTimer,也就是说以后当创建NSTimer的时候,可以指定它是在什么模式下运行的。...,而且runloop的运行模式kCFRunLoopDefaultMode NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0

68121

iOS_Memory Leak 内存泄露治理

没有引用的内存,无法再次使用或释放(可以使用 Leaks 工具检测) Abandoned memory:app 仍有引用,但没有任何用途的内存 Cached memory:app 仍有引用,可能会再次使用以获得更好的性能...---- 10、MLeaksFinder Tencent 的开源检测内存泄露库:MLeaksFinder 可在日常开放中默认打开,以便及时获得泄露警告,而不用特意打开以上工具去排查。...NSTimer 为什么这么容易导致内存泄露: 很重要的一点是因为 RunLoop 会强引用 NSTimer(系统实现的无法做修改)。...所以开发者必须在恰当的时机将NSTimer释放掉。...当开发者直接传入 self 时,就导致了 self 无法被释放,进而在 dealloc 里释放 NSTimer 的代码也不会执行,从而导致了内存泄露:RunLoop -> NSTimer -> self

55420

2020-iOS最新面试题解析—1(原理篇)

是自动创建并启动 子线程的RunLoop需要手动创建 子线程的RunLoop创建步骤如下: 在子线程中调用NSRunLoop currentRunLoop创建RunLoop对象(懒加载,只创建一次) 获得...是只读的,只能在构建NSTimer对象时赋值 [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector...在Objective-C中向nil发送消息是完全有效的——只是在运行时不会有任何作用 如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil) 如果方法返回值为指针类型,其指针大小为小于或者等于...结构体中各个字段的值将都是0 如果方法的返回值不是上述提到的几种情况,那么发送给nil的消息的返回值将是未定义的 具体原因分析 * objc是动态语言,每个方法在运行时会被动态转为消息发送,即:objc_msgSend...* 首先它会发送-methodSignatureForSelector:消息获得函数的参数和返回值类型。

1.6K21
领券