分享

iOS动态模板加载

 quasiceo 2018-07-19


需求是这样子的,让iOS前端写一个页面的类文件,然后打包给后台,前端下载这个文件,再加载出页面。动态化模板。

这种需求是不科学的,因为Swift的方法都是静态的,也就是说工程在编译的时候就加载好了所需要的类文件。

后来查了查资料,还真能做,就是有点麻烦。并且不能上线。

静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内存。但是苹果不让使用自己的动态库,否则审核就无法通过。

动态库,顾名思义就是动态加载的。

我们可以写一个类页面,打包成动态库,然后给后台,这样就是OK了。

动态库的打包百度上多的是,这里就不介绍了。下面开始使用动态库。有OC和Swift2中方式

先上OC代码的使用。

-(void)testFramework

{

    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

    NSLog(@"%@",paths);

    NSString *documentDirectory = nil;

    if ([paths count] != 0)

        documentDirectory = [paths objectAtIndex:0];

    

    //拼接我们放到document中的framework路径

    NSString *libName = @"oneView.framework";

    NSString *destLibPath = [documentDirectory stringByAppendingPathComponent:libName];

    

    //判断一下有没有这个文件的存在 如果没有直接跳出

    NSFileManager *manager = [NSFileManager defaultManager];

    if (![manager fileExistsAtPath:destLibPath]) {

        NSLog(@"There isn't have the file");

        return;

    }

    

    //复制到程序中

    NSError *error = nil;

    

    //加载方式二:使用NSBundle加载动态库

    NSBundle *frameworkBundle = [NSBundle bundleWithPath:destLibPath];

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多