`

iOS使用NSClassFromString

 
阅读更多

http://www.cocoachina.com/b/?p=219

 

NSClassFromString是一个很有用的东西,尤其在进行iPhone toolchain的开发上。

正常来说,

id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];

id myObj = [[MySpecialClass alloc] init];

是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。

因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。

比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:

[[NSClassFromString(@"NSTask") .....]]

而不要直接使用[NSTask ...]这种写法。

NSClassFromString的好处是:

1 弱化连接,因此并不会把没有的Framework也link到程序中。

 

2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。

分享到:
评论

相关推荐

    ios应用类项目

    在Objective-C中,我们可以使用`NSClassFromString`和`performSelector:`等方法实现反射。 5. **JSON解析**: iOS提供了`NSJSONSerialization`类用于解析和序列化JSON数据。开发者可以将JSON字符串转换为Objective-C...

    iOS反射Demo

    在iOS开发中,反射是一种强大的技术,它允许程序在运行时检查类、对象和方法的信息,甚至可以在运行时创建和调用对象。本示例"iOS反射Demo"着重展示了如何利用反射来处理从爱邦公交API获取的复杂JSON数据,并将其...

    IOS 实现发邮件功能

    Class mailClass = NSClassFromString(@"MFMailComposeViewController"); if (mailClass != nil) { if ([mailClass canSendMail]) { [self displayComposerSheet]; } else { [self launchMailAppOnDevice]; ...

    iOS 5 Programming Cookbook.pdf

    - **实现方法**:使用`NSClassFromString`函数从字符串加载类。 - **应用场景**:动态加载类实例,增加程序的灵活性。 - **1.21 分配和使用字符串** - **知识点**:字符串的管理和操作。 - **实现方法**:使用`...

    ios反射机制

    在iOS开发中,反射机制是一种强大的工具,它允许程序在运行时检查对象的类型和属性,甚至能够根据字符串形式的类名动态地创建和操作对象。这种机制在很多场景下非常有用,比如处理未知类型的对象、实现通用的序列化...

    淘宝_for_iOS_历程

    他还分享了WeakLink的使用技巧,如何在不破坏兼容性的情况下,利用NSClassFromString和respondsToSelector:等方法,来适应不同版本的iOS系统。 总之,淘宝_for_iOS_的历程不仅是技术的演进,更是对移动开发领域的一...

    IOS应用源码——plamoni-SiriProxy-1fe1dc3.rar

    7. **插件系统**:SiriProxy的一个关键特性是支持插件,这可能涉及到Objective-C的动态加载机制,如NSBundle和NSClassFromString等API的使用,以及遵循特定协议的插件类设计。 8. **权限控制与安全**:在自定义Siri...

    IOS5 Programming Cookbook

    Based on the provided information from "iOS 5 Programming Cookbook" by Vandad Nahavandipoor, we can derive a comprehensive set of knowledge points related to iOS development using Objective-C....

    IOS应用源码——ReflectionTest.rar

    在Objective-C中,反射主要通过Foundation框架的NSClassFromString、-[NSObject performSelector:]等方法实现,使得我们可以在运行时动态地获取类信息、调用方法、访问属性等。 二、Objective-C的元类(Meta-class...

    iOS完美的网络状态判断工具_网络_解放号论坛1

    首先,iOS中通常使用`Reachability`类(RJFHMFGNPNXy)来进行网络可达性检测。这个类是苹果官方文档推荐的,用于监测网络连接状态,包括无网络、Wi-Fi以及蜂窝数据等不同类型的网络。`Reachability`类非常易于使用,...

    ios-瀑布流tableview可以扔了.zip

    [test registerClass:[NSClassFromString(@"JayCollectionViewCell") class] forCellWithModel:[NSCollectionBaseModel class]]; //添加数据源 可以继承NSCollectionListModel、NSCollectionBaseModel 绑定...

    ios wkwebview离线化加载h5资源解决方案

    Class cls = NSClassFromString(@"WKBrowsingContextController"); SEL sel = NSSelectorFromString(@"registerSchemeForCustomProtocol:"); if ([(id)cls respondsToSelector:sel]) { [(id)cls performSelector...

    iOS开发-动态库加载(实时模块更新).doc

    id<NSObject> dynamicOpenMenth = [bundle loadAndReturnClass:[NSClassFromString(@"DynamicOpenMenth")]]; if ([dynamicOpenMenth respondsToSelector:@selector(startWithObject:withBundle:)]) { ...

    ios中在app应用内强制刷新小组件案例

    总之,要在iOS应用中集成SwiftUI小组件并实现强制刷新,你需要创建SwiftUI视图、实现TimelineProvider、在主工程中集成小组件,并使用WidgetCenter API来触发小组件的更新。理解这些核心概念和步骤,将帮助你成功...

    iOS去除Webview键盘顶部工具栏的方法

    在 iOS 开发中,使用 Webview 打开网页时,在进行表单输入时,键盘顶部会多出一个工具栏。左边有两个上下按钮,右边有一个 Done/完成按钮。这是用来切换输入框的,就像 PC 上按 Tab 键可以切换输入框一样。但是,在...

    ios中,sqlite数据库数据与实体自动绑定

    在iOS开发中,SQLite数据库是一种常用的轻量级数据库,它被广泛用于存储应用程序的数据。Objective-C作为Apple的原生编程语言,提供了SQLite的API来与数据库进行交互。本篇文章将详细探讨如何在Objective-C中实现...

    快速解决iOS10不能跳转系统WiFi列表的问题

    但苹果随后更新了新的URL Scheme,使得在iOS10及以上版本中,可以使用以下代码进行跳转: ```swift #define iOS10 ([[UIDevice currentDevice].systemVersion doubleValue] >= 10.0) NSString *urlString = @"App-...

    iOS获取当前网络环境的实现方法(推荐)

    if ([subview isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) { // 获取网络类型数据 NSNumber *dataNetworkItemView = subview; // 根据dataNetworkType的值判断网络环境 switch (...

    iOS中的UISearchBar搜索框组件基础使用指南

    在iOS应用开发中,`UISearchBar` 是一个非常重要的组件,用于实现用户输入查询的关键字。它通常位于屏幕顶部或导航栏中,提供了一个简洁的界面来搜索数据。`UISearchBar` 包含了一些基本属性,如 `barStyle`、`text`...

    iOS中给自定义tabBar的按钮添加点击放大缩小的动画效果

    在iOS开发中,自定义TabBar是一种常见的需求,以便实现更个性化的用户界面。本文将详细讲解如何在自定义TabBar中为按钮添加点击时的放大缩小动画效果。这个效果可以提升用户体验,使用户更容易感知当前选中的标签。 ...

Global site tag (gtag.js) - Google Analytics