使用NSClassFromString
使用NSClassFromString可以直接从字符串初始化出对象出来,即使不引用头文件也没关系,以下是源码:
AppDelegate.m
//
// AppDelegate.m
// Class
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//
#import "AppDelegate.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
Class aClass = NSClassFromString(@"RootViewController");
UIViewController *CV = [[aClass alloc] init];
self.window.rootViewController = CV;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
@end
RootViewController.m
//
// RootViewController.m
// Class
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//
#import "RootViewController.h"
@interface RootViewController ()
@end
@implementation RootViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
}
@end
改进点的方式(直接改装成为category):
NSString+CreateClass.h 与 NSString+CreateClass.m
//
// NSString+CreateClass.h
// Class
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSString (CreateClass)
- (Class)toClass;
@end
//
// NSString+CreateClass.m
// Class
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//
#import "NSString+CreateClass.h"
@implementation NSString (CreateClass)
- (Class)toClass
{
return NSClassFromString(self);
}
@end
-备注-
这种用法是有着缺陷的呢:
这是在运行时的时候检测出来的,很不保险的说.