adi*_*dit 1 iphone memory-management objective-c ipad ios
所以我在开源项目中看到了这种方法,当我尝试运行静态分析器时,我只是难以理解为什么这不会泄漏内存.我认为它应该泄漏的原因是因为它分配内存但从未释放它.每次调用方法时它都会释放它(因为= nil).任何人都可以为我照亮吗?
- (BOOL)isValid(NSString *)name
{
// Using a set so access is faster
static NSMutableSet *exp = nil;
// Setup the set once with AB testing info
if (exp == nil) {
exp = [[NSMutableSet alloc] initWithCapacity:5];
}
if (exp != nil) {
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
分析器识别static存储限定符,并理解它不会超出范围(当然,直到终止).
每次调用方法时它都会释放它(因为= nil).
不是这样.这是第一次调用方法时发生的 - 只有一次,因为它是static.