当前位置: 首页 > news >正文

iOS开发进阶(八):ipa应用唤起并跳转至指定页面

文章目录

    • 一、前言
    • 二、应用跳转
    • 三、延伸阅读 OC函数与参数
    • 四、拓展阅读

一、前言

可通过 react-native log-androidreact-native log-ios 命令查看控制台日志信息。

添加版本标识可通过 npx react-native run-android --variant=release 实现。

APP间互相唤起是常用场景,android中通过IntentFilter实现APP唤起。

二、应用跳转

# pragma mark - 客户端点击跳转回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{if ([[url scheme] isEqualToString:@"com.csdn.shq5785"]) {return [self handleOpenUrl:url sourceApplication:kMainBundleID annotation:nil];} else {// 存储参数,待到E初始化成功后,再通知JS跳转页面。NSString *params = [url host];if (params) {[[NSUserDefaults standardUserDefaults] setObject:params forKey:kOpenAppParamsUserDefaultName];}return YES;}
}

三、延伸阅读 OC函数与参数

Object-c的一个方法可以包含多个参数,除了第一个参数外,后面的所有参数都要写名字,这一点和其他的语言有很大的不同。

多个参数的写法

(方法数据类型) 函数名: (参数1数据类型) 参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ;

举个例子,一个方法的定义如下:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName;

函数实现如下:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName{大儿子 = myOldestKidName;二儿子 = mySecondOldestKidName;三儿子 = myThirdOldestKidName;}

函数调用如下:

Kids *myKids = [[Kids alloc] init];[myKids setKids: @”C大力” secondKid: @”C二力” thirdKid: @”C小力”];

再来一个实例:

-(int)changeColorToRed:(float)red green:(float)green blue:(float)blue;

函数调用:

[myColor changeColorToRed:5.0 green:2.0 blue:6.0];

需要注意的是,用冒号隔开的各个参数顺序是不能更改的。

另外,OC还具有以下特点:

  1. objective-c使用 nil 来表示 NULL

  2. objective-c用 YES NO 来表示 true false;

  3. objective-c用 #import<stdio.h> 而不是#include<stdio.h>来包含头文件;

  4. 在objective-c中,称类的方法(method)为消息(message)。在C++中,这样来调用方法: aClass->function(var); 但是在objective-c中,使用 [aClass function:var]

objective-c中的消息(message)比较有意思的特点是:

  1. 调用消息的类可以不知道如何响应这个消息。如果它不知道如何处理这个消息,它会自动的将这个消息转给其他的类,比如它的父类;

  2. 调用消息的类可以是nil。在C++中,在使用类方法之前,都需要检查对象是否为空,所以在实现析构函数的时候,常会有如下的代码,如if (var) { delete var; } 但是在objective-c中,可以直接写[var release]; 即使var == nil, 也不会有问题。

先写个hello world

#import <stdio.h>int main( int argc, char* argv[] ) {printf( "hello world\n" );return 1;}

确实跟C很像吧。但是也不其然,objective-c是一个很好的面向对象的语言。跟C还是有挺多不同之处。

我们先实现一个简单的类。

// Sample.h#import <Foundation/NSObject.h>@interface Sample: NSObject {int a;}- (void) print;- (void) setA: (int)a;@end

逐句解析下。

#import <Foundation/NSObject.h>

在objective-c中,所有的类都必须继承NSObject,这个概念很像Java里面的Object

objective-c声明类的格式如下:

@interface className: baseClassName {member variables;}
member functions
@end

大家可能注意到objective-c中函数的声明挺有特点的,现在来解释:

objective-c的函数声明的基本格式如下

-/+ (return type) function_name;-/+ (return type) function_name : (parameter type) parameter;-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;
  1. -/+: 这个称做scope, 如果在函数前面是- ,那么理解为一般函数;如果是+, 可以理解为c++中的static函数

  2. 函数参数声明: objective c和 c++, java都很不一样。如果没有参数的话,在函数名后面,可以什么都不写;如果只有一个参数,在 : 后面声明参数的类型和名称;如果有多个参数的话,每个参数前面都要有一个 : , 然后接着是参数类型和参数值。可是大家可能还是觉得很奇怪。比如上面这个例子中, otherParameter 这个东西是干什么的呢?在objective-c中,对于有多个参数的函数,可以理解为将函数的名称拆成了几个部分,每个部分都是对紧接着的参数的一个解释。比如在C++中:void initializeRectangle(int x1, int y1, int x2, int y2) , 但是我们并不知道这些参数都是什么意思;但是在objective-c中,可以这样声明:void initializeRectangeWithLeftUpX: (int)x1 LeftUpY: (int)y1 RightBottomX: (int)x2 RightBottomY:(int)y2;

下面来实现这个简单的Sample类

// sample.m
#import <stdio.h>
#import "Sample.h"
@implementation Sample- (void) print {printf( "%d\n", a );
}- (void) setA : (int) aa {a = aa;
}
@end

使用这个类

#import "Sample.h"
int main( int argc, char* argv[] ) {Sample* smp = [[Sample alloc] init];[smp setA:1];[smp print];[smp release];
}

在objective-c中,每一个类的对象都是一个指针,这和Java差不多(每个类的对象都用new声明)。alloc类似于C中的malloc, init是NSObject中的方法,用于初始化这个对象。如果我们实现了自己的初始化方法,也可以调用自己的初始化方法。使用完毕后,需要调用release释放空间。

四、拓展阅读

  • 《Android进阶(二十九) 走近 IntentFilter》
  • 《ReactNative进阶(三十九):DeviceEventEmitter 实现发送和监听消息》
  • 《iOS开发进阶(七):AppDelegate 文件解析》

相关文章:

  • 【三】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题
  • 如何学习、上手点云算法(三):用VsCode、Visual Studio来debug基于PCL、Open3D的代码
  • 抖音详情API:音频和图片资源的管理与使用
  • 数据结构:顺序表的奥秘
  • pgrouting学习记录
  • 【图像拼接/视频拼接】论文精读:Efficient Video Stitching Based on Fast Structure Deformation
  • 8套成熟在用的三级医院信息化系统源码,HIS、LIS、PACS、智慧导诊、线上预约挂号支付系统源码
  • mongo基本使用
  • 已解决ResponseEntityException的Spring MVC异常响应实体异常的正确解决方法,亲测有效!!!
  • Vue.js 实用技巧:深入理解 Vue.mixin
  • ICVQUANTUMCHINA报告:《2024全球量子精密测量产业发展展望》
  • [本地跑项目总是要权限校验输密码]Error: EACCES: permission denied
  • 宝塔php站点设置伪静态规则 访问 a.com 时候跳转到 a.com/b.html
  • 【数据结构】初识
  • 2024第二次培训:win11系统下使用nginx、JDK、mysql搭建基于vue2、java前后端分离的web应用运行环境
  • 07.Android之多媒体问题
  • CentOS 7 防火墙操作
  • fetch 从初识到应用
  • golang 发送GET和POST示例
  • If…else
  • java正则表式的使用
  • leetcode-27. Remove Element
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue.js源码(2):初探List Rendering
  • vuex 学习笔记 01
  • 安卓应用性能调试和优化经验分享
  • 从重复到重用
  • 给Prometheus造假数据的方法
  • 排序(1):冒泡排序
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 白色的风信子
  • Hibernate主键生成策略及选择
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ###项目技术发展史
  • #AngularJS#$sce.trustAsResourceUrl
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (初研) Sentence-embedding fine-tune notebook
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (十六)Flask之蓝图
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (算法二)滑动窗口
  • (小白学Java)Java简介和基本配置
  • (新)网络工程师考点串讲与真题详解
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • .NET : 在VS2008中计算代码度量值
  • .net CHARTING图表控件下载地址
  • .NET Core 中的路径问题
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)