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

方法“”UIKit.UIApplication.Main“”已过时:为类型安全起见,请使用具有“”type“”参数的重载,而不是“”String“”参数

基础概念

UIKit.UIApplication.Main 是 iOS 开发中的一个方法,用于启动应用程序的主事件循环。这个方法在过去被广泛使用,但现在已经被标记为过时(obsolete),因为它使用字符串来指定入口点,这种方式不够类型安全。

相关优势

使用具有 type 参数的重载方法的优势在于:

  1. 类型安全:通过使用类型而不是字符串,编译器可以在编译时检查错误,减少运行时错误的可能性。
  2. 代码可读性:类型参数使得代码更易读,更易于维护。
  3. 更好的设计:类型安全的接口设计符合现代编程的最佳实践。

类型

新的重载方法通常会接受一个表示入口点类型的参数,例如 UIApplicationDelegate 的子类。

应用场景

在 iOS 应用程序中,通常需要在 AppDelegate 类中启动应用程序的主事件循环。使用新的重载方法可以确保类型安全,并且代码更加清晰。

问题原因及解决方法

问题原因

UIKit.UIApplication.Main 方法被标记为过时,主要是因为它使用字符串来指定入口点,这种方式容易出错,并且在编译时无法进行类型检查。

解决方法

使用具有 type 参数的重载方法来替代 UIKit.UIApplication.Main。以下是一个示例代码:

代码语言:txt
复制
using UIKit;

namespace MyApp
{
    [Register("AppDelegate")]
    public class AppDelegate : UIApplicationDelegate
    {
        public override void FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            // 初始化代码
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            UIApplication.Main(args, null, typeof(AppDelegate));
        }
    }
}

在这个示例中,UIApplication.Main 方法的调用使用了 typeof(AppDelegate) 作为类型参数,而不是字符串。这样可以确保类型安全,并且代码更加清晰。

参考链接

通过这种方式,你可以避免使用过时的方法,并且提高代码的类型安全性和可维护性。

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

相关·内容

代码质量规则

CA1030:在适用处使用事件 该规则检测名称通常用于事件的方法。 如果为响应明确定义的状态更改而调用一个方法,则应由事件处理程序调用该方法。 调用该方法的对象应引发事件而不是直接调用该方法。...由于调用静态成员不需要类型的示例,因此没必要使用构造函数。 为安全起见,字符串重载应使用字符串自变量调用统一资源标识符 (URI) 重载。...CA1307:为了清晰起见,请指定 StringComparison 字符串比较运算使用不设置 StringComparison 参数的方法重载。...CA1830:在 StringBuilder 上优先使用强类型“追加和插入”方法重载 Append 和 Insert 为除 String 之外的多种类型提供重载。...CA2249:请考虑使用 String.Contains 而不是 String.IndexOf 对 string.IndexOf 的调用(其结果用于检查是否存在子字符串)可以用 string.Contains

2.2K30

设计规则

CA1030:在适用处使用事件 该规则检测名称通常用于事件的方法。 如果为响应明确定义的状态更改而调用一个方法,则应由事件处理程序调用该方法。 调用该方法的对象应引发事件而不是直接调用该方法。...当编译使用 ObsoleteAttribute 标记的类型或成员时,将显示该特性的 Message 属性,这为用户提供有关过时的类型或成员的信息。...由于调用静态成员不需要类型的示例,因此没必要使用构造函数。 为安全起见,字符串重载应使用字符串自变量调用统一资源标识符 (URI) 重载。...CA1054:URI 参数不应为字符串 如果某方法采用 URI 的字符串表示形式,则应提供采用 URI 类的实例的相应重载,该重载以安全的方式提供这些服务。...CA1068:CancellationToken 参数必须最后出现 方法具有 CancellationToken 参数,但它不是最后一个参数。

2K20
  • 如何在 TypeScript 中使用函数

    除了为函数提供额外的文档外,类型信息还可以减少代码中出现错误的机会,因为将无效数据类型传递给类型安全函数的风险较低。...: string) => string; 在此示例中,我们使用 type 关键字声明了一个新类型,然后,为括号中的两个参数提供了类型,并为箭头后面的返回值提供了类型。...事件回调本身将接收具有以下类型的对象作为第一个参数: type EventContext = { value: string; }; 然后,我们可以像这样编写 onEvent 函数: type EventContext...为简单起见,在此示例中,我们将使用数组: type User = { id: number; firstName: string; }; const users: User[] = [ {...创建用户定义类型保护的方法是使用以下语法作为函数的返回类型: parameterName is Type 其中 parameterName 是我们正在测试的参数的名称,Type 是此函数返回 true

    15K10

    C#反射的特性

    特性来告诉编译器这个方法已经过时,然后当编译器发现当程序中有地方在使用这个用Obsolete标记过的方法时,就会给出一个警告信息。...现在运行这段代码,我们会发现编译器给出了一个警告:警告CS0618: “Attribute.TestClass.ShowMsg()”已过时:“请使用新的SendMsg(Message msg)重载方法”...那么在本例中,元数据应该是:注释类型(“更新”或者“创建”),修改人,日期,备注信息(可有可无)。而特性的目标类型是DemoClass类。...注意ValidOn属性不是一个命名参数,因为它不包含set访问器。 这里大家一定疑惑为什么会这样划分参数,这和特性的使用是相关的。...当指定GetCustomAttributes(Type attributeType, bool inherit) 中的第一个参数attributeType时,将只返回指定类型的特性,否则将返回全部特性;

    86640

    接口和抽象有什么区别?

    使用时机:当想要支持多重继承,或是为了定义一种类型请使用接口; 当打算提供带有部分实现的“模板”类,而将一些功能需要延迟实现请使用抽象类;当你打算提供完整的具体实现请使用类。...多态,说到多态,会立即想到重写(override) 和重载 (overload),向上转型。 重写是父子类中相同名字和参数的方法,不同的实现。 重载是相同名字方法,但是不同的参数。...要注意的是 方法名称和参数一致,但是返回值不同,这样不是重载,编译会报错!!!...public int doSomething() { return 0; } // 输入参数不同,意味着方法签名不同,重载的体现 public int doSomething(LisString...开闭原则,对扩展是开放的,但是对修改是关闭的。程序设计应保证平滑的扩展性,尽量避免因为新增同类功能而修改已实现。这样可以减少回归问题。(回归测试)。

    38020

    Python|Google Python样式指南(2)

    如果foo仅使用一个参数 b调用if,则将其设置为0。如果使用两个参数调用if,则b具有第二个参数的值。 2.12.2 优点 通常,您有一个使用许多默认值的函数,但是在极少数情况下,您想覆盖默认值。...默认参数值提供了一种简便的方法,而不必为罕见的异常定义很多函数。由于Python不支持重载的方法/函数,因此默认参数是“伪造”重载行为的简便方法。 2.12.3缺点 默认参数在模块加载时评估一次。...2.14.4 结论 如果可能,请使用“隐式”假,例如,if foo:而不是if foo != []:。...2.15 过时的语言特性 尽可能使用字符串方法而不是字符串模块。使用函数调用语法而不是apply。如果函数参数是内联lambda,则使用列表理解和for循环,而不是filter和map。...(Type Annotated Code) 2.21.1 定义 类型注释(或“类型提示”)用于函数或方法的参数并返回值: def func(a: int) -> List[int]: 您还可以使用类似的

    71830

    性能规则

    CA1810:以内联方式初始化引用类型的静态字段 当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型的每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。...CA1826:使用属性,而不是 Linq Enumerable 方法 对支持等效且更有效的属性的类型使用了 Enumerable LINQ 方法。...CA1830:在 StringBuilder 上优先使用强类型“追加和插入”方法重载 Append 和 Insert 为除 System.String 之外的多种类型提供重载。...CA1831:在合适的情况下,为字符串使用 AsSpan 而不是基于范围的索引器 对字符串使用范围索引器并向 ReadOnlySpan 类型隐式赋值时,将使用方法 Substring 而非...CA1834:对单字符字符串使用 StringBuilder.Append(char) StringBuilder 具有将 char 用作其参数的 Append 重载。

    86000

    一文带你了解 TypeScript 函数

    [1,2,3],["测试"]) 这样写就会报错,因为TypeScript 识别到了第一个参数,为Number 类型, 第二个参数 String 类型,类型不一,就会报错了,这时,我们可以告诉它 为哪些类型...----测试 // 123----------undefined 当没有传递可选类型属性值时,它会返回 undefined, 因为可选类型本身具有联合类型(它本身的类型 和 undefined。...函数重载指相同的函数名,不同的参数,在调用函数时,它会根据你所传递的参数进入对应的重载函数执行业务逻辑。...makdData不同的参数 , 一个实现签名 (它兼容的处理了前面两个重载签名的逻辑处理) 写好重载技巧 两个重载具有相同的参数计数和相同的返回类型 可以使用联合类型,改造成函数的非重载版本 function...⚠️注意: 默认情况下可以理解成typescript将函数中的this as any,而oImplicitThis:true的情况下,必须去声明this的类型,才能在函数或者对象中使用this. function

    26811

    快速掌握JDK常用注解

    /指定该策略的注解只能修饰参数类型的定义 TYPE_PARAMETER, //JDK1.8版本开始 //指定该策略的注解只能修饰一个类型的使用 TYPE_USE } 示例...static void methodDeprecated(){ System.out.println("此方法不推荐使用"); } 调用方会出现警告,提示你此方法已经过时请使用最新其他姿势...@SafeVarargs @SafeVarargs在JDK 1.7中引入,主要目的是处理可变长参数中的泛型,此注解告诉编译器:在可变长参数中的泛型是类型安全的。...可变长参数是使用数组存储的,而数组和泛型不能很好的混合使用。 注意:使用@SafeVarargs注解,对于非static或非final声明的方法,不适用,会编译不通过。...请注意,可以使用lambda表达式,方法引用或构造函数引用创建函数接口的实例。 如果使用此注释类型注释类型,则编译器需要生成错误消息,除非: 类型是接口类型,而不是注释类型,枚举或类。

    71310

    现代C++之SFINAE

    如您所见,在序列化过程中,很容易检查对象是否具有属性并查询该属性的类型。在我们的例子中,它允许我们使用serialize方法(如果可用),否则返回到更通用的方法str。功能强大,不是吗?...SFINAE概念只是为“健全”的编译器保证这种“健全”的行为。 所有的表达式都不会导致SFINAE。一个广泛的规则是说功能/方法主体之外的所有替代都是“安全的”。...您的编译器确实是个好人,不会遗忘任何分支,因此在这种情况下,obj必须同时具有serialize方法和to_string重载。...到那时,我们可以将hasSerialize函数重新构造为序列化函数,并使其返回std :: string而不是编译时boolean。但是我们不会那样做!...让我们从消除腐烂的方法开始,使用美味的decltype和bake 一点点的constexpr而不是sizeof。

    3K20

    C++那些事之SFINAE

    如您所见,在序列化过程中,很容易检查对象是否具有属性并查询该属性的类型。在我们的例子中,它允许我们使用serialize方法(如果可用),否则返回到更通用的方法str。功能强大,不是吗?...SFINAE概念只是为“健全”的编译器保证这种“健全”的行为。 所有的表达式都不会导致SFINAE。一个广泛的规则是说功能/方法主体之外的所有替代都是“安全的”。...您的编译器确实是个好人,不会遗忘任何分支,因此在这种情况下,obj必须同时具有serialize方法和to_string重载。...到那时,我们可以将hasSerialize函数重新构造为序列化函数,并使其返回std :: string而不是编译时boolean。但是我们不会那样做!...让我们从消除腐烂的方法开始,使用美味的decltype和bake 一点点的constexpr而不是sizeof。

    2.2K20

    多重收纳(类模板)C++

    "string") pushBoxstring>(cin, pBoxes, type);         // 我们觉得一个盒子也是可以包装另一个盒子的         // 为了便捷起见,我们采用盒子指针来表示盒子间的包装关系...b)如果包装值是非空指针,那么一般来说打印指针值是没有什么价值的,我们更关注的是指针所指向的内容。 我们希望能够对T*这样的模板参数类型定义不同处理方式。...为CBox模板类定义适合以原生指针作为模板参数的特化版本     由于定义的成员变量为指针类型,且同一对象被new出来后可能被赋予多个所有者,     为了简化编程,本题不考虑析构函数(使用默认的即可)...int*,string*等其它原生指针 如果使用了CBox,请注意为相应的T类要有输出重载 5....就是为了对于特定类型来执行不同的代码,而不是去调用通用模板。

    19030

    go 1.18 系列(1)- 变化说明

    不允许将类型参数或指向类型参数的指针作为结构类型中的未命名字段嵌入,同样地,也不允许在接口类型中嵌入类型参数。 具有多个 term 的 union 元素可能不包含具有非空方法集的接口类型。...编译器 Go 1.17实现了一种在选定操作系统的 64 位 x86 架构上使用寄存器而不是堆栈来传递函数参数和结果的新方法。...该net包包括与现有方法并行的新方法,但返回netip.AddrPort而不是较重的net.IP或 *net.UDPAddr类型: Resolver.LookupNetIP, UDPConn.ReadFromUDPAddrPort...go/constant 新Kind.String 方法为接收者类型返回一个人类可读的名称。 go/token 新常量~添加到TILDE中用以支持泛型。...新方法Clone拷贝输入的string 返回的不是输入string的内存 Trim, TrimLeft, 和TrimRight 小型 ASCII 割集,速度提高了 10 倍。

    2.1K20

    Kotlin 编码规约

    : Int, name: String) 具有较长类头的类应该格式化,以使每个主构造函数参数都在带有缩进的独立的行中。..."b", "c") // 良好:listOf() 返回 List val allowedValues = listOf("a", "b", "c") 默认参数值 优先声明带有默认参数的函数而不是声明重载函数...String, Person> Lambda 表达式参数 在简短、非嵌套的 lambda 表达式中建议使用 it 用法而不是显式声明参数。...命名参数 当一个方法接受多个相同的原生类型参数或者多个 Boolean 类型参数时,请使用命名参数语法,除非在上下文中的所有参数的含义都已绝对清楚。...,它们并非调用不同的超类构造函数,并且不能简化为具有默认参数值的单个构造函数,那么优先用工厂函数取代这些重载的构造函数。

    3.2K22

    Hello——Java10新特性,请了解一下

    因为var是一个类型引用对象,它和表达式右边的类型具有相同的属性。  ...✔ 线程-局部变量管控   这是在 JVM 内部相当低级别的更改,现在将允许在不运行全局虚拟机安全点的情况下实现线程回调。这将使得停止单个线程变得可能和便宜,而不是只能启用或停止所有线程。...String getMethodType(): 返回此堆栈帧所代表的方法类型,描述参数类型和返回值类型。 ▪ java.lang.invoke.MethodType:   Class lastParameterType(): 返回这个方法类型的最后一个参数类型。如果这个方法类型没有参数,则返回空类型作为岗哨值(Sentinel Value)。...如果这个 JarEntry 是一个多版本 jar 文件的入口,它被配置为这样处理,这个方法返回的名字是 JarEntry 所代表的版本条目的入口,而不是 ZipEntry.getName()返回的基本条目的路径名

    55550

    Hello——Java10新特性,请了解一下

    因为var是一个类型引用对象,它和表达式右边的类型具有相同的属性。  ...✔ 线程-局部变量管控   这是在 JVM 内部相当低级别的更改,现在将允许在不运行全局虚拟机安全点的情况下实现线程回调。这将使得停止单个线程变得可能和便宜,而不是只能启用或停止所有线程。...String getMethodType(): 返回此堆栈帧所代表的方法类型,描述参数类型和返回值类型。 ▪ java.lang.invoke.MethodType:   Class lastParameterType(): 返回这个方法类型的最后一个参数类型。如果这个方法类型没有参数,则返回空类型作为岗哨值(Sentinel Value)。...如果这个 JarEntry 是一个多版本 jar 文件的入口,它被配置为这样处理,这个方法返回的名字是 JarEntry 所代表的版本条目的入口,而不是 ZipEntry.getName()返回的基本条目的路径名

    83850
    领券