iOS经典讲解之判断App是否第一次启动

深入理解iOS App的启动过程 前言 启动时间是衡量应用品质的重要指标。 本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main函数之前和main函数之后两个角度去分析如何优化启动时间。准备知识Mach-O哪些名词指的是Mach-o Executable 可执行文件 Dylib 动态库 Bundle 无法被连接的动态库,只能通过dlopen()加载 Image 指的是Executable,Dylib或者Bun 阅读详情

作者:Loving_iOS

转载请标明出处:http://blog.youkuaiyun.com/loving_ios/article/details/50435840


方法一、在didFinishLaunchingWithOptions方法中加入如下代码:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]){
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstLaunch"];
//第一次启动
}else{
//不是第一次启动了
}

方法二、判断app是否第一次启动或者更新后第一次启动
#define LAST_RUN_VERSION_KEY @"last_run_version_of_application"
- (BOOL) isFirstLoad{
NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary]
objectForKey:@"CFBundleShortVersionString"]; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSString *lastRunVersion = [defaults objectForKey:LAST_RUN_VERSION_KEY];

if (!lastRunVersion) {
[defaults setObject:currentVersion forKey:LAST_RUN_VERSION_KEY];
return YES;
}
else if (![lastRunVersion isEqualToString:currentVersion]) {
[defaults setObject:currentVersion forKey:LAST_RUN_VERSION_KEY];
return YES;
}
return NO;
}


[iOS]iOS中使用URLScheme进行App跳转 URLScheme的作用我们都知道苹果手机中的APP都有一个沙盒,APP就是一个信息孤岛,相互是不可以进行通信的。但是iOS的APP可以注册自己的URL Scheme,URL Scheme是为方便app之间互相调用而设计的。我们可以通过系统的OpenURL来打开该app,并可以传递一些参数。 URL Scheme必须能唯一标识一个APP,如果你设置的URL Scheme与别的APP的URL Sch... 阅读详情

相关推荐

iOS 优化App启动时间-启动详解(上篇),学习网页前端开发

正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!资料领取方式:点击这里前往免费获取厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!资料领取方式:点击这里前往免费获取资料领取方式:点击这里前往免费获取。

2401_84103903的博客 1155

IOS中如何判断APP是否安装后首次运行或升级后首次运行

对于是否为首次安装的App可以使用如下方法来判断 [[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]; 如果App是通过App Store升级的话可以通过版本号来判断 [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBun...

weixin_30633405的博客 360

IOS开发入门之二——第一个App

    如果你对怎么开始IOS开发都不懂的话,请看点下面的链接,先学习关于IOS开发环境的配置以及Swift语言入门:     IOS开发入门之一——Swift语言基础     本章将教大家创建一个标准的苹果手机应用并让它在手机模拟器上运行起来。    需要iOS开发视频资料可以加我微信: 1914532832  验证信息请注明:IOS开发 一、创建IOS工程     1. 打开Xcode软...

yuchu1900的博客 1万+

IOS开发判断是否第一次使用软件且下次app自动更新后再次打开还是第一次使用

对于用户来讲,在第一次打开软件的时候,最好有个引导页,告诉用户软件怎么使用,或者本次软件的主要的更新在哪儿,提高用户的软件体验。 下面有有两种方法 1.本地存储一个bool变量判断是不是第一次启动,若是第一次启动就打开引导页。 2.本地存储版本号,判断当前版本号是否大于本地保存的版本号,如果大于则启动引导页。 那么这两种那个好呢,显然第二种较好,因为第一种方法,若是版本升级的时候,我们往往

你的笑靥ˋ夏了夏天的博客 2967

iOS 判断应用程序首次启动方法编程

方法首先检查UserDefaults中的"HasLaunchedBefore"配置值,如果该值不存在(即应用程序首次启动),则返回true。在开发iOS应用程序时,有时我们需要在应用程序首次启动时执行一些特定的操作,例如展示欢迎界面、显示用户协议或进行首次设置。本文将介绍在iOS应用程序中判断首次启动的方法,并提供相应的源代码示例。方法中设置了"HasLaunchedBefore"配置值,以便在以后的启动中判断应用程序是否已经启动过。这样,我们可以确保在应用程序的整个生命周期内,首次启动操作只会执行一次。

HackWhisper的博客 274

IOS如何判断一个应用是否已安装以及获取已安装列表

使用以上方法有个前提是必须要现在项目的清单文件里配置跳转协议url白名单才行:如下图,如果要想查微信、淘宝、微博是否安装,必须增加白名单,否则直接调用isAppInstalled(scheme: "weixin://")必然会返回false,即不生效。可以看到这个方法本质是通过目标应用所特有的协议去判断目标应用是否已安装,并非直接通过报名判断。这就要确保协议的唯一性,而如果有多个应用定义了相同的协议,则此方法可能会不准确。网上给出最多的方案为根据应用的协议判断是否可以启动应用从而判断某应用是否已安装。

康康 2500

ios 判断app是否为第一次启动

判断app是否为第一次启动,几乎是每一个app都会用到的!下面就是最常用的判断的方法之一: 在delegate的didFinishLaunchingWithOptions里面添加下面这一句就行了: if (![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {   //第一次启动   [[NSUserDef

gx_wqm的专栏 857

iOS App初次启动时的用户引导页制作实例分享

应用程序APP一般都有引导页,引导页可以作为操作指南指导用户熟悉使用;也可以展现给用户,让用户了解APP的功能作用。引导页制作简单,一般只需要一组图片,再把图片组展现出来就可以了。展示图片组常用UIScrollView来分页显示,并且由UIPageControl页面控制器控制显示当前页。UIScrollView和UIPageControl搭配会更加完美地展现引导页的功能作用。下面我们来看具体的实例: 我们用NSUserDefaults类来判断程序是不是第一次启动或是否更新,在 AppDelegate.swift中加入以下代码: 代码如下: func application(applicati

判断App是否为第一次打开

在appdelegate.m中找到 “application:didFinishLaunchingWithOptions:” 方法, 添加以下代码: if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"]) {    [[NSUserDefaults standardUserDefaults] setB

求知若饥,虚心若愚 1516

嵌入式开发实战:LWIP中PPP协议配置全流程(含CHAP认证避坑指南)

本文是一份嵌入式开发实战指南,详细解析了如何在STM32平台上配置LWIP协议栈中的PPP协议,实现从串口到IP网络的完整连接。内容涵盖工程搭建、源码整合、关键配置、串口驱动绑定、状态管理以及CHAP认证等核心流程,并重点提供了CHAP认证失败的排查与避坑指南,帮助开发者高效打通嵌入式设备的网络连接。

plant的博客 464

Altium Designer操作技巧(12)——如何进行邮票孔拼版?

【摘要】本文详细介绍了PCB设计中邮票孔拼板的全流程操作方法。首先解释了邮票孔拼板的定义、核心目的(提高贴片效率、方便生产)和适用场景(异形板、V-CUT无法实现的情况)。重点阐述了关键设计参数,包括孔径、数量、间隙等规范要求,并提供了两种具体操作方案:传统复制粘贴法和新版阵列放置法。文章通过图文详细演示了从PCB复制、邮票孔添加、板框定义到定位孔和Mark点设置的完整步骤,最后强调了对称性、非金属化孔等设计要点,以及需要与板厂确认工艺参数等注意事项。

u012526819的博客 1678

iOS——APP启动流程

条件准备:环境,平台,版本,路径,主机信息等等;确定是否有共享缓存并去加载(一般是非模拟器情况)载入GDB调试器通知。(老版本的不重要,没用,不知道这个名词没关系)添加dyld到UUID列表中,启用堆栈符号化。(没用,不需要知道)实例化主程序,instantiateFromLoadedImage(镜像文件加载器,就是以mach-o的header方式加载主程序镜像。加载任何插入的库,(使用loadInsertedDylib)link(链接)主程序link 镜像文件(前面插入的库)

m0_73348697的博客 3132

RK3588 MIPI屏幕调试避坑指南:双通道8Lane下DSC压缩屏的花屏、分层问题排查实录

本文详细解析了RK3588平台在双通道8Lane MIPI接口下调试DSC压缩屏时遇到的花屏、分层问题。通过硬件信号完整性检查、软件配置验证及帧数据分析,提供了一套系统化的排查方法,并深入探讨了初始化序列优化和双通道同步机制,帮助工程师高效解决高分辨率屏幕显示异常问题。

weixin_27015733的博客 280

android 判断支付宝是否安装包,js判断移动端是否安装某款app的多种方法

本文实例讲解了js判断移动端是否安装某款app的多种方法,分享给大家供大家参考,具体内容如下第一种方法:一:判断是那种设备var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+M...

weixin_39598308的博客 747

抖音无人直播技术全解析:从原理、实操到合规化思考

直播技术作为内容分发的核心形式,其底层依赖于流媒体协议(如RTMP)与实时音视频编码推流。通过OBS等软件进行场景合成与虚拟摄像头技术,可以实现丰富的画面包装与自动化播放。这项技术的核心价值在于突破人力与时间的限制,实现内容的持续输出与流量获取,在电商带货、品牌展示、陪伴式内容等场景中具有应用潜力。然而,单纯依赖录播循环存在高风险,平台风控系统会通过内容重复性检测与互动行为模型进行识别。因此,更可持续的方向是探索“半无人直播”或自动化辅助工具,例如利用AI数字人驱动或直播切片技术,在合规前提下提升运营效率。

weixin_29895109的博客 509

BIOS硬件监控实战:如何手动读取IT8738芯片的温度与风扇数据(附代码)

本文深入探讨了如何绕过操作系统和HWMonitor等监控软件,直接通过寄存器级操作读取IT8738超级I/O芯片的硬件监控数据。文章提供了从动态定位EC空间、构建底层读写函数到解码传感器寄存器映射的完整实战指南,并附有C语言代码示例,帮助开发者理解BIOS硬件监控的底层原理,适用于定制硬件开发与故障诊断。

weixin_29192211的博客 109

php 判断app浏览器打开,手机浏览器下判断是否安装某app,并判断是否打开该应用...

今天在做前端输出的时候,需要和app的做些对接工作。就是在手机浏览器中下载某app时,能判断该用户是否安装了该应用。如果安装了该应用,就直接打开该应用;如果没有安装该应用,就下载该应用。那么下面就对在浏览器中,用js判断某用户是否安装了该应用,并判断是否打开该应用做个简单的介绍。那么,怎么判断某用户是否安装了某应用呢?在这里,先写段html代码,如下:判断手机端是否安装某应用,并打开该应用的js代...

weixin_30565101的博客 755

zabbix深度监控之邮件告警、微信群和微信告警

本文详细介绍了Zabbix监控系统实现邮件告警和微信告警的配置方法。邮件告警部分包含QQ和163邮箱的SMTP服务器配置、消息模板设置、告警流程三步骤(媒介配置、触发器动作、用户设置)。微信告警分为两种方式:企业微信群机器人告警(通过webhook实现)和企业微信应用告警(需创建应用并获取API参数)。两种告警方式都提供了完整的配置流程,包括脚本编写、权限设置、消息模板定制等关键步骤,并特别说明了如何使个人微信接收企业微信告警消息。文章还对比了SMTP、POP3、IMAP三种邮件协议的差异及适用场景。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 816

js判断移动端是否安装某款app的多种方法

本文实例讲解了js判断移动端是否安装某款app的多种方法,分享给大家供大家参考,具体内容如下 第一种方法: 一:判断是那种设备 varisAndroid=u.indexOf('Android')>-1||u.indexOf('Linux')>-1;//android终端或者uc浏览器 varisiOS=!!u.match(/\(i...

dechen6073的博客 403

【GeoDa实用技巧100例】024:geoda计算全局(局部)莫兰指数Moran‘s I,LISA聚类地图,显著性地图

【GeoDa实用技巧100例】024:geoda计算全局(局部)莫兰指数Moran's I,单变量莫兰指数,双变量莫兰指数计算,LISA聚类地图,显著性地图,Geoda双变量莫兰指数是一种强大的地理空间数据分析工具。

智慧空间实验室 6052

基于STM32F4XX 、HAL库的GXHT30C温湿度传感器驱动应用C语言程序设计

define GXHT30C_STATUS_WRITE_CHK (1 << 0) // 写数据校验状态。#define GXHT30C_STATUS_HUMI_TRACK (1 << 11) // 湿度跟踪报警。#define GXHT30C_STATUS_TEMP_TRACK (1 << 10) // 温度跟踪报警。#define GXHT30C_STATUS_CMD_STATUS (1 << 1) // 命令执行状态。

PP_Cottage的博客 227

IOS App启动速度优化

针对IOS App性能优化这方面,有一点值得一提,那就是对App启动速度的优化,为了避免在启动时处理过多业务逻辑导致的启动速度慢,使用户体验感变差,以下是对了解到的资料做尽可能简单易懂的讲解。说到启动速度的优化这就需要先借助工具来进行App性能监测,友盟+u-apm应用性能监控平台,就可以帮助开发者针对App性能中出现的各种问题精准检测,为以后的优化之路做铺垫。 App启动速度跟启动时间有关,我们先来了解App的启动时间: App启动时间 程序启动总时间包含:t(App总启动时间) = t1(main

资讯汇 519

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

iOS 优化App启动时间-启动详解(上篇)

Mach -O的格式虚拟内存基础知识二进制Mach -O怎么被加载和准备怎么去计算启动时间优化启动时间Mach -O、虚拟内存速成课主要简单的介绍了Mach -O和虚拟内存的知识,下文在app启动的时会有很多相关的术语,不知道会懵逼。Mach-O为Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。Mach-O曾经为大部分基于Mach核心的操作系统所使用。

2401_89690349的博客 1031

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ios 一个app启动另一个app

问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序。 开发环境:xcode7.3.1 关键词:白名单(LSApplicationQueriesSchemes)、注册自己的URL Demo源代码链接:http://pan.baidu.com/s/1bo327sb 如何从一个app中,启动另一个app???本人ios菜鸟(工作需要,刚开始自学ios,现学现...

dixianfu3727的博客 331

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IOS开发高手课第二篇 App 启动速度怎么做优化与监控?

我已经在专栏的第一篇文章中,和你梳理了一份 iOS 开发的知识体系框架图。今天,我们就正式从基础出发,开始自己的 iOS 开发知识体系构建之路吧。接下来,我就先和你聊聊与 App 启动速度密切相关的那些事儿。希望你听我说完启动速度的事儿之后,在专栏里的学习状态也能够快速地启动起来。在文章开始前,我们先设想这么一个场景:假设你在排队结账时,掏出手机打开 App 甲准备扫码支付,结果半天进不去,后面排队的人给你压力够大吧。然后,你又打开 App 乙,秒进,支付完成。试想一下,以后再支付时你会选择哪个 App 呢

fegus的博客 1099
上一篇: iOS经典讲解之Socket使用教程
下一篇: iOS经典讲解之socket编程”粘包“问题
刘新林
博客等级 码龄11年 72粉丝 61原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值