Статический анализатор, вероятно, просто смотрит на эту строку, поскольку он недостаточно умен, чтобы понять, что вы на самом деле пытались устранить проблему.
Я бы использовал этот шаблон
NSIndexPath *tmpPath = [[NSIndexPath alloc] init];
self.indexPath = tmpPath;
[tmpPath release];
Более подробное объяснение. Поэтому, когда анализатор смотрит на линию
self.indexPath = [[NSIndexPath alloc] init];
Видит, что +1 удерживает из этой части
[[NSIndexPath alloc] init]
и он видит, что self.indexPath
скомпилирован в
[self setIndexPath:[[NSIndexPath alloc] init]];
Этот метод (если автоматически сгенерирован @synthesize
), вероятно, будет выглядеть следующим образом
- (void)setIndexPathL(NSIndexPath *)indexPath
{
if (_indexPath != indexPath) {
[_indexPath release];
_indexPath = [indexPath retain];
}
}
Так что теперь анализатор видит, что есть еще retain
на indexPath.
Таким образом, это 2 x +1 retain, и можно предположить, что вы освободите только один раз в раздаче.