美文网首页
OpenUDID内存泄漏

OpenUDID内存泄漏

作者: 002and001 | 来源:发表于2018-09-21 20:01 被阅读143次

    通过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'
    

    关联pod

    相关文章

      网友评论

          本文标题:OpenUDID内存泄漏

          本文链接:https://www.haomeiwen.com/subject/ntkznftx.html