1. 程式人生 > >ios NSClassFromString 類的動態載入

ios NSClassFromString 類的動態載入

NSClassFromString是一個很有用的東西,用此函式進行動態載入嘗試,如果返回nil,則不能載入此類的例項。

正常來說,使用如下方法來對不確定的類進行初始化
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 NSClassFromString 動態載入

NSClassFromString是一個很有用的東西,用此函式進行動態載入嘗試,如果返回nil,則不能載入此類的例項。 正常來說,使用如下方法來對不確定的類進行初始化id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];和id my

Android動態載入技術

Android類動態載入技術     Android應用開發在一般情況下,常規的開發方式和程式碼架構就能滿足我們的普通需求。但是有些特殊問題,常常引發我們進一步的沉思。我們從沉思中產生頓悟,從而產生新的技術形式。    如何開發一個可以自定義控制元件的Android應用?

Android動態載入技術

{    Object* loader = (Object*) args[0];    StringObject* nameObj = (StringObject*) args[1];    const u1* data = (const u1*) args[2];    int offset = args[

java 動態載入 / static 語句塊載入一次

jaav 類動態載入,static 語句塊載入一次 package test.java; /** * * @author lj * @printout * [Loaded test.j

透過現象看本質:Java動態載入和熱替換

摘要:本文主要介紹類載入器、自定義類載入器及類的載入和解除安裝等內容,並舉例介紹了Java類的熱替換。 最近,遇到了兩個和Java類的載入和解除安裝相關的問題: 1) 是一道關於Java的判斷題:一個類被首次載入後,會長期留駐JVM,直到JVM退出。這個說法,是不是正確的? 2) 在開發的一個整合平臺中,需要

動態載入Dll時,通過Type生成物件

原文: 動態載入Dll時,通過Type生成類物件 轉:http://www.cnblogs.com/zfanlong1314/p/4197383.html “反射”其實就是利用程式集的元資料資訊。 反射可以有很多方法,編寫程式時請先匯入 System.Reflection 名稱空間。

動態生成載入

轉載自:Java執行時動態生成class的方法 Java是一門靜態語言,通常,我們需要的class在編譯的時候就已經生成了,為什麼有時候我們還想在執行時動態生成class呢? 因為在有些時候,我們還真得在執行時為一個類動態建立子類。比如,編寫一個ORM框架,如何得知一個簡單的JavaBean

Java執行時動態載入之ClassLoader

https://blog.csdn.net/fjssharpsword/article/details/64922083 ************************************************************ 需求場景:動態載入類ClassLoaderd,在

java動態編譯class,動態載入,執行載入的方法,直接可執行測試

直接上圖上程式碼 public static void main(String[] args) { TestClass testClass=new TestClass(); try { //動態編譯程式碼 Java

使用URLClassLoader動態載入

一般動態載入類都是直接用Class.forName()這個方法,但這個方法只能建立程式中已經引用的類,並且只能用包名的方法進行索引,比如Java.lang.String,不能對一個.class檔案或者一個不在程式引用裡的.jar包中的類進行建立。但使用URLClassLoader就可以直接根據建立

java動態載入指定的或者jar包反射呼叫其方法-涉及其他jar中的就報ClassNotFound問題分析及解決思路

       在這篇博文中java動態載入指定的類或者jar包反射呼叫其方法,介紹動態載入指定的類,當時我是拿URLClassLoader介紹的,當然可以自定義一個ClassLoader重寫對應的方

Java反射之——Java動態載入

1、靜態載入和動態載入的區分: 我們在理解動態載入的同時,需要區分Java的編譯和執行: 編譯時載入屬於靜態載入,我們平時開發中使用最多的就是靜態載入,new物件都屬於靜態載入類,在編譯時載入所有可能使用到的類(雖然有可能用不到)。A a = new A(); 執行時載入屬於動態載入,我

【譯】12. Java反射——動態載入和重新載入

博主最近比較忙,爭取每週翻譯四篇。等不急的請移步原文網頁。  =====================================================================================

java動態載入

//new建立物件是靜態載入類,在編譯時刻就需要載入所有的可能用到的類。而通過動態載入類可以解決此問題 class office{          public static void main(String[] args){                  if("w

Ext4.2.1學習歷程之二:自定義動態載入

原文出處   http://blog.itpub.net/28562677/viewspace-1067421/ -------------------------------------------------------------- 在些extjs類的定義時有必要簡單

JAVA的靜態載入動態載入以及NoClassDefFoundError和ClassNotFoundException

我們都知道JAVA初始化一個類的時候可以用new 操作符來初始化,也可通過Class.forName的方式來得到一個Class型別的例項,然後通過這個Class型別的例項的newInstance來初始化.我們把前者叫做JAVA的靜態載入,把後者叫做動態載入.後者在很多框架中

Java反射專題學習-動態載入

 今天博主繼續學習基礎系列之反射專題;今天學習的內容是動態類的載入,我們以舉簡單的例子來進行一步步說明:  首先我們看一個例子:OfficeTest.java /** * @Description 測試類 * @Date 2019/1/3 14:22 * @Cr

java反射:動態載入

    我們在程式設計時也許會遇到這樣的問題,當我們在定義兩個類物件時,如果其中一個類不存在,或者類的方法找不到,那麼即使另外一個類以及其類方法是存在並且正確的,我們在執行時也會報錯,如以下這個問題: if("Word".equals(ar

載入器工具:動態設定classpath,獲得載入列表等

下面的一個小工具類提供了對系統類載入器和擴充套件類載入器的動態控制能力.可以在程式中加入classpath,當然也可以獲得類載入器載入的類列表,相信java的動態能力! package org.rut.core; import java.io.File;import java

spring工作中動態載入其他

需求:在測試或者其他地方,需要載入service或者mapper的時候,由於該類不是controller類,所以不能用@Autowired直接注入,那麼怎麼解決呢?import org.springframework.web.context.ContextLoader; im