iOS开发Xcode之Analyze静态分析(每日日志)

1.在使用GSKeyChain时遇到 GSKeyChain Potential leak of an object stored into 'keychainQuery'

没有释放的 keychainQuery
没有释放的 keychainQuery

问题:GSKeyChain中出现内存漏洞,需要释放对应的'keychainQuery',但是不能直接释放,需要做一下处理。

解决方法:先将值接收下来,再释放。

将keychainQuery接收一下,再释放
将keychainQuery接收一下,再释放

我的代码里面需要查看keychainQuery的值,所以我加了NSLog,如果不需要可以去掉下面两行代码:

keychainQuery = (__bridgeNSMutableDictionary*)newDic;

NSLog(@"%@", keychainQuery);


2.LocalizabilityIssue --User-facing text should use localized string macro

大概意思是:面向用户的文本应使用本地化的字符串宏

问题:代码中有用到字符串,在Analyze时候就会出现这个问题,而且会很多。

解决方法:(1)在 Build Settings 里面找到 Missing Localizability(缺少本地化)设置为NO,就会忽略这个问题啦;

                  (2)你也可以在应用里面进行本地化 ---->> 即将文字存成plist,然后在代码中去访问。

(1)第一种解决方法


3.Dead store

问题:无效数据, 就是有一些属性或者对象初始化了又没被使用。

解决方法:去掉初始化方法,直接赋值。


4.Logic error 逻辑错误

Converting a pointer value of type 'NSNumber *' to a primitive boolean value; instead, either compare the pointer to nil or call -boolValue(将类型为“NSNumber*”的指针值转换为原始布尔值; 相反,要么将指针与nil进行比较,要么调用-boolValue)

问题:使用NSNumber作为判断条件的时候,没有指定类型,编译器不知道怎么判断。

解决办法:指定 NSNumber 对象与 nil 进行比较。


5.Memory error 内存错误

nil passed to a callee that requires a non-null 1st parameter(nil传递给需要非null第一个参数的被调用者)

问题:param 可能为nil。

解决办法:通常这种情况下,只需要添加一个非空判断,保证传入的参数不为空即可。


6.出现Potential leak of an object stored into...

题:在Reachability.m(用于检测当前网络状态)中出现内存泄漏’ref‘。

解决方法查了一下发现,在ARC下,只有OC对象才能自动释放,但这里的ref并不是一个对象类型。在调用ref内存计数+1了,但是在后面用完后却没release。

所以呢在ref用完之后,要手动释放。加一句CFRelease(ref);

你可能感兴趣的:(iOS开发Xcode之Analyze静态分析(每日日志))