-(bool) respondstoselector: selector 用來判斷是否實現了某個方法(被封裝在乙個selector的物件裡傳遞)
+(bool) instancesrespondtoselector: selector 用來判斷例項是否有以某個名字命名的方法. 和上面乙個不同之處在於, 前面這個方法可以用在例項和類上,而此方法只能用在類上.
(bool)conformstoprotocol:(protocol *)aprotocol; 是用來檢查物件(包括其祖先)是否實現了指定協議類的方法。-(id) performselector: selector 執行時呼叫某個方法(void)performselector:(sel)aselector withobject:(id)anargument afterdelay:(nstimeinterval)delay; 延時呼叫某個方法
(一)關於iskindofclass和ismemberclass的區別,在網上看到乙個很形象的例子,這裡就直接拿來用了。
這裡有兩個類,分別是繼承於nsobject的person,person的teacher
#import@inte***ce
person : nsobject
-(void)setname:(nsstring*)n;
@end
#import "person.h"
@implementation
person
-(void)setname:(nsstring *)n
@end
#import "person.h"@inte***ce
teacher : person
-(void)teach;
@end
#import "teacher.h"
@implementation
teacher
-(void)teach
@end
使用iskindofclass的例子:
nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];輸出結果:person *person = [[person alloc] init];
teacher *teacher = [[teacher alloc] init];
//yes
if ([teacher iskindofclass:[teacher
class]])
//yes
if ([teacher iskindofclass:[person
class]])
//yes
if ([teacher iskindofclass:[nsobject
class]])
[person release];
[teacher release];
[pool release];
2012-07-0414:34
:17.315
objectivectest
[2595:f803]
teacher 是 teacher類或teacher的子類
2012-07-04
14:34
:17.316
objectivectest
[2595:f803]
teacher 是 person類或person的子類
2012-07-04
14:34
:17.316
objectivectest
[2595:f803]
teacher 是 nsobject類或nsobject的子類
使用ismemberofclass的例子:
nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];person *person = [[person alloc] init];
teacher *teacher = [[teacher alloc] init];
//yes
if ([teacher ismemberofclass:[teacher
class]])
//no
if ([teacher ismemberofclass:[person
class]])
//no
if ([teacher ismemberofclass:[nsobject
class]])
[person release];
[teacher release];
[pool release];
輸出結果:
2012-07-0414:23
:07.965
objectivectest
[2460:f803]
teacher
teacher類的成員
看了這兩個例子,應該就會明白了。
(二)關於performselector呼叫和直接呼叫的區別
下面兩段**都在主線程中執行,我們在看別人**時會發現有時會直接呼叫,有時會利用performselector呼叫,今天看到有人在問這個問題,我便做一下總結,
[delegateimage**********:
self
didfinishwithimage:image];
[delegate
performselector:@selector(image**********:didfinishwithimage:)withobject:self
withobject:image];
1、performselector是執行時系統負責去找方法的,在編譯時候不做任何校驗;如果直接呼叫編譯是會自動校驗。如果image**********:didfinishwithimage
:image:
不存在,那麼直接呼叫 在編譯時候就能夠發現(借助xcode可以寫完就發現),但是使用performselector的話一定是在執行時候才能發現(此時程式崩潰);cocoa支援在執行時向某個類新增方法,即方法編譯時不存在,但是執行時候存在,這時候必然需要使用performselector去呼叫。所以有時候如果使用了performselector,為了程式的健壯性,會使用檢查方法
- (bool)respondstoselector:(sel)aselector;
2、直接呼叫方法時候,一定要在標頭檔案中宣告該方法的使用,也要將標頭檔案import進來。而使用performselector時候, 可以不用import標頭檔案包含方法的物件,直接用performselector呼叫即可。
OC一些不常用的函式
int rand 隨機數生成。intabs int a 整數的絕對值,abs 10 結果為10 double fabs double a double型別的絕對值,fabs 3.14 結果為3.140000 double fabsf float a fabsf型別的絕對值,fabsf 3.14 結果...
oc 一些常用命令
如何通過atos命令獲取64位錯誤位址的呼叫棧 對於使用arm64的ios應用,要獲取64位錯誤位址的呼叫棧,可以這麼寫 用這樣的命令來列印呼叫符號 unix指令 開啟終端,輸入指令 pwd 檢視當前資料夾路徑 cd 返回目錄 cd desktop 返回桌面 ls 開啟當前路徑下所有檔案 ls l ...
OC原始碼中的一些巨集
if define cplusplus define foundation extern extern c else define foundation extern extern endif 表示extern全域性變數,此時並沒有分配記憶體,需要在.m檔案中實現,為了支援c和c 混編 cplusp...