pop动画片段

从底部弹起来,及消失到底部

POPBasicAnimation

#import <pop/pop.h>
- (void)viewDidLoad {
    self.talkBar = [[UIView alloc] init];

    [self.view addSubview:_talkBar];

    [_talkBar mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.mas_equalTo(wbSelf.view);
        make.bottom.mas_equalTo(wbSelf.view).offset(50);
        make.size.mas_equalTo(CGSizeMake(WIDTH,50));
    }];


- (void) popTalkBar{
    POPBasicAnimation *anBasic = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPositionY];
    anBasic.toValue = @(self.talkBar.center.y-100);
    anBasic.beginTime = CACurrentMediaTime() + 0.2f;
    [self.talkBar pop_addAnimation:anBasic forKey:@"position"];
}
- (void) disTalkBar{
    POPBasicAnimation *anBasic = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPositionY];
    anBasic.toValue = @(self.view.height+50);
    anBasic.beginTime = CACurrentMediaTime() + 0.2f;
    [self.talkBar pop_addAnimation:anBasic forKey:@"position"];
}
### 守护线程的概念 在 Java 中,守护线程是一种特殊的线程,在后台运行并为其他线程提供服务。当 JVM 中所有的非守护线程都结束时,JVM 将退出,而不会等待守护线程完成其执行[^3]。 守护线程通常用于调度系统任务,例如垃圾回收和内存管理等操作。它们并不处理程序的核心逻辑,而是支持这些核心功能的正常运作。 --- ### 设置守护线程的方法 可以通过 `Thread` 类中的方法来设置某个线程是否为守护线程: ```java Thread t = new Thread(() -> { System.out.println("Daemon thread is running."); }); t.setDaemon(true); // 设置该线程为守护线程 t.start(); ``` 需要注意的是,只有在线程启动之前调用 `setDaemon(true)` 方法才能生效;如果尝试在一个已经启动的线程上调用此方法,则会抛出 `IllegalThreadStateException` 异常[^4]。 --- ### 守护线程的特点 1. **生命周期依赖于非守护线程**:只要存在任何非守护线程未终止,守护线程就会继续运行。一旦所有非守护线程结束,即使还有守护线程正在运行,JVM 也会自动关闭。 2. **不参与 JVM 的存活判断**:由于守护线程的存在并不会阻止 JVM 停止工作,因此它适合用来执行一些辅助性的任务,比如监控资源使用情况或者清理临时文件等。 3. **默认情况下不是守护线程**:新创建的线程默认是非守护线程。要将其转换成守护状态,需显式调用 `setDaemon()` 函数[^5]。 --- ### 使用场景举例 下面是一个简单的例子展示如何利用守护线程来进行日志记录的任务: ```java public class DaemonExample { public static void main(String[] args) throws InterruptedException { Thread daemonThread = new Thread(() -> { while (true) { try { System.out.println("Logging..."); Thread.sleep(1000); } catch (InterruptedException e) { break; } } }); daemonThread.setDaemon(true); daemonThread.start(); Thread.sleep(5000); // 主线程休眠一段时间后结束 System.out.println("Main thread finished, JVM will exit now."); } } ``` 在这个案例里,我们定义了一个无限循环的日志打印守护进程。尽管这个线程永远不会主动停止自己的活动,但由于它是作为守护角色存在的缘故,所以随着主线程的终结整个应用程序也随之被销毁了。 --- ### 调试与诊断工具的应用 对于涉及多线程尤其是包含守护线程的应用程序来说,调试可能会变得复杂起来。此时可以借助前面提到过的几种命令行实用程序帮助分析当前系统的状况。例如通过 `jstack` 查看具体的堆栈信息以便定位潜在问题所在位置[^1]。 另外还可以运用到像 `jstat` 这样的性能统计工具获取关于 GC 性能的数据指标等等[^2]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值