通过Pod导入OpenUDID,在使用的时候同instrument的leak发现内存泄漏问题。
我们的Pod文件中
pod 'OpenUDID','~> 1.0'
通过排查和网上搜索(OpenUDID的issue里面有提及这个问题)最终定位在了OpenUDID.m文件中的
-
(NSString*) valueWithError:(NSError **)error {
....
if(appUID == nil)
{
// generate a new uuid and store it in user defaults
CFUUIDRef uuid = CFUUIDCreate(NULL);
appUID = (NSString *) CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
....
}
处,于是自己fork了一个分支查看发现如下
image.png
1.0版本并不是最新代码,查看对应的commit,发现截图中的2个commit做了修改,fix了内存泄漏相关问题
image.png 。
测试步骤:
修改OpenUDID.m文件,
把整个文件内容替换为分支上的最新commit的内容,这个时候先不要profile,删除App后clean一下,run一次后profile,再使用leak检查,这个时候OpenUDID不存在内存泄漏了。
解决办法:
还是希望通过Pod来管理第三方,
于是自己从OpenUDID fork出自己的仓库,添加podspec文件和LICENSE文件,push后打上对应的tag,然后关联pod上传到https://cocoapods.org/pods/,最后修改自己的项目引用自己关联的pod项目。
FHHOpenUDID.podspec
Pod::Spec.new do |s|
s.name = "FHHOpenUDID"
s.version = "1.0.1"
s.summary = "FHHOpenUDID"
s.homepage = "https://github.com/002and001/OpenUDID"
s.license = "MIT"
s.author = { "002and001" => "xxewz1@163.com" }
s.source = { :git => "https://github.com/002and001/OpenUDID.git", :tag => "#{s.version}" }
s.module_name = 'OpenUDID'
s.ios.deployment_target = '8.0'
s.frameworks = "Foundation", "UIKit"
s.source_files = "*.{h,m}"
s.requires_arc = false
end
最后修改pod文件:
pod 'FHHOpenUDID','~> 1.0'
网友评论