14、OC 指標變數的強制型別轉換
阿新 • • 發佈:2019-02-13
為避免上述錯誤的產生,在實際開發中,我們建議先判斷物件的型別,然後再強制型別轉換,判斷型別有如下方法: -(BOOL)isMemberOfClass:(Class)aClass:判斷該物件是否是aClass類的例項。 -(BOOL)isKindOfClass:(Class)aClass:判斷該物件是否為aClass類或其子類的例項。 +(BOOL)isSubclassOfClass:(Class)aClass:類方法,判斷當前類是否為aClass類的子類。int main(int argc, const char * argv[]) { @autoreleasepool { NSObject* obj = @"hello"; //強制型別轉化成NSString NSString* str = (NSString*)obj; NSLog(@"轉換後:%@",str); NSObject* obj2 = @"hello"; //強制型別轉化成NSArray NSArray* arr = (NSArray*)obj2; //報錯,arr實際指向的是NSString物件 NSLog(@"轉換後:%@",[arr count] ); } }
NSObject* obj = @"Hello"; //isKindOfClass //判斷obj是否是NSString類或其子類的例項,輸出true NSLog(@"%d",[obj isKindOfClass:[NSString class]]); //判斷obj是否是NSObject類或其子類的例項,輸出true NSLog(@"%d",[obj isKindOfClass:[NSObject class]]); //判斷obj是否是NSObject類或其子類的例項,輸出false NSLog(@"%d",[obj isKindOfClass:[NSArray class]]); //判斷NSString是否是NSObject類的子類 輸出true NSLog(@"%d",[NSString isSubclassOfClass:[NSObject class]]);