一、UITabBarButton initWithImage:selectedImage:label:withInsets
使用instrument测试leaks,测出结果:
点击切换 Call Tree 双击条目
跳转代码为:
for (int i=0; i<self.tabBar.items.count; i++) {
UITabBarItem*item=self.tabBar.items[i];
NSString*imageName=seleImageArray[i];
NSString*unImageName=unSeleImageArray[i];
[item setSelectedImage:[[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]];
[item setImage:[[UIImage imageNamed:unImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]];
item.title=tabBarName[i];
item.tag=i;
}
标注颜色的位置 内存泄露 4bytes*2
二、UIWebSelectionAssistant addNonEditableForceTextSelectionGestureRecognizersToView 造成内存泄露
三、OpenUDID memory leak
代码
NSString * appUID = (NSString *) [defaults objectForKey:kOpenUDIDAppUIDKey];
if(appUID == nil)
{
// generate a new uuid and store it in user defaults
CFUUIDRef uuid = CFUUIDCreate(NULL);
appUID = (NSString *) CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
instrument 检测leak 结果
appUID = (NSString *) CFUUIDCreateString(NULL, uuid);
泄露
这个方法返回的对象是CFStringRef格式,这是个Core Foundation对象,在这里将其强制转换以后可以当做NSString对象来使用,但是这个CF对象是的引用计数+1,此时是需要处理的,在ARC下也不会自动释放,需要手动在使用完这个对象后调用CFRelease去手动释放即: CFRelease(uuid);
此时测试还存在内存泄露,
[appUID autorelease];
对appUID 添加自动释放池问题解决,再次检测leak memory不存在。