1. 程式人生 > >14、OC 指標變數的強制型別轉換

14、OC 指標變數的強制型別轉換

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] );
    }
}

為避免上述錯誤的產生,在實際開發中,我們建議先判斷物件的型別,然後再強制型別轉換,判斷型別有如下方法: -(BOOL)isMemberOfClass:(Class)aClass:判斷該物件是否是aClass類的例項。 -(BOOL)isKindOfClass:(Class)aClass:判斷該物件是否為aClass類或其子類的例項。 +(BOOL)isSubclassOfClass:(Class)aClass:類方法,判斷當前類是否為aClass類的子類。
        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]]);