1.resources
使用 resources 来指定资源,被指定的资源只会简单的被 copy 到目标工程中,如:
官方认为用 resources 是无法避免每个库和主工程之间的同名资源冲突,同时,Xcode 也不会对这些资源做优化。
2.resource_bundles
resource_bundles 允许定义当前 Pod 库的资源包的名称和文件。用 hash 的形式来声明,key 是 bundle 的名称,value 是需要包括的文件的通配 patterns。比如:
CocoaPods 官方强烈推荐使用 resource_bundles,因为用 key-value 可以避免每个库和主工程之间的同名资源冲突
1.如果使用 resourses 指定资源:
读取图片可以直接从MainBundle读取:
2.如果使用 resource_bundles 方式指定资源:
读取图片就要从自己的bundle读取,也就是OTSDebugPluginsModule.bundle:
1.如果使用 resourses 指定资源:
图片需要到自己的 frameWork 里的bundle读取:
2.如果使用 resource_bundles 方式指定资源:
读取图片同样也需要到 frameWork 里的bundle读取,但是bundle名称是OTSDebugPluginsModule.bundle:
后来试了一下不指定 OTSDebugPluginsModule.bundle 也行(注意:Xib和Storyboard不行,必须要指定OTSDebugPluginsModule.bundle):
动态库加载图片:
针对动态库和静态库通过resource_bundles获取资源,封装了一个分类UIImage+OTSAssets.h:
1.动态库获取资源
2.静态库获取资源
方案一:通过bundle获取
方案二:通过bundleName获取
有了这个分类的话,在业务组件里面获取图片资源就很方便了,比如在登录模块OTSAccountModule:
声明:
这样就可以全局使用了:
1. 库包之间的冲突问题。
2. 主App与B静态库调用A库包不同时,是否会出现其他问题。
3. 在打包ipa时,会不会出现项目过大,或者打包失败的问题。
1. 库包冲突问题已解决。(参考 上一文 )
2. 主工程导入含第三方登录的A库包,demo静态库文件导入不含第三方登录的A库包,运行未出现问题。
3. 在demo静态库调用不含第三方登录A库包方法,从打印结果可看出,demo静态库的实际是调用主工程A库包的方法。
* 由此可以得出,demo静态库中的A静态库只是起到一个桥接的作用,实际调用的均是主工程的A库包。
4. 打包静态库,发现静态库并没有因为导入A库包而增大。(A库包8.7M,编译出来的demo静态库371KB)
5. 能正常编译出ipa包。
1. 将demo静态库导入的A库包中多余的.m文件均删除,只留下需要暴露到外界的.h文件。
2. A库包编译通过后,替换掉demo静态库中A库包,编译主工程。
3. 发现,能正常使用A库包中的方法,功能也能实现。
上述猜测成立。
方法1 --创建一个 AFHTTPClient 实例
AFHTTPClient * client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://api.jiepang.com"]]
// 这里一定要有一个 baseURL - 不然会抛出一个异常 --
创建一个 NSURLRequest 实例
NSDictionary * params = @{@"apiver": @"4",@"id" : @"830755858",@"extra_info": @"1"}
NSURLRequest * request = [client requestWithMethod:@"POST"
path:@"users/show"
parameters:params]
@param method 网络请求方式,比如 GET,POST,PUT,DELETE , 不能为 nil --
@param path 和 baseURL 组合成为一个 url -- 通俗的说,就是调用的接口 -- 比如,调用http://api.jiepang.com/users/show,这个接口 -- 那么 baseURL 为 http://api.jiepang.com -- path 为users/show
@param parameters 网络请求参数 -- http://api.jiepang.com/v1/users/show?id=123 -- id=123 就是这个参数
创建一个 AFHTTPRequestOperation 实例进行网络链接
AFHTTPRequestOperation * operation = [client HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success obj == %@",responseObject)
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"faild , error == %@ ", error)
}]
[operation start]
这样 - 一次简单的调用就OK了 -
当然也可以,用封装好的其它方法 --
- (void)getPath:(NSString *)path
parameters:(NSDictionary *)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
- (void)postPath:(NSString *)path
parameters:(NSDictionary *)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
- (void)putPath:(NSString *)path
parameters:(NSDictionary *)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
- (void)deletePath:(NSString *)path
parameters:(NSDictionary *)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
- (void)patchPath:(NSString *)path
parameters:(NSDictionary *)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
方法二 --
[client getPath:path
parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString * obj = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]
NSLog(@"obj == %@",obj)
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"faild -- ")
}]
这和上面的效果是一样的 --
看到,前面返回的数据全部为 NSdata - 为添加了麻烦 -- 而且大部分的 api 返回数据都为 json --
同样 - 可以用 AFHTTPRequestOperation 的子类 AFJSONRequestOperation 来替代 --
方法三 --
NSDictionary * params = @{@"apiver": @"4",@"id" : @"830755858",@"extra_info": @"1"}
AFHTTPClient * client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://api.jiepang.com"]]
NSURLRequest * request = [client requestWithMethod:@"POST"
path:@"users/show"
parameters:params]
AFJSONRequestOperation * operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"json == %@",JSON)
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"faild -- ")
}]
[operation start]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)