我正在数据库控制器类上创建一个便捷方法,该方法旨在为另一个项目提供两个子项目。这就是它的样子。
+ (void)getLeft:(out MySubItem *)left
right:(out MySubItem *)right
forItem:(MyItem *)item
{
...
left = aResult;
right = anotherResult;
}
在所有使用此方法的情况下,左和右都是强属性。
[Database getLeft:self.leftItem right:self.rightItem forItem:anItem];
这有问题吗?静态分析器还抱怨,因为从不读取左右声明(死存储),我希望能够解决此问题。
您想要的是更改self.leftItem的值,因此您应该使用self.leftItem的地址(它是MySubItem *)作为参数,因此应该使用MySubItem **
。
试试吧:
+ (void)getLeft:(out MySubItem **)p_left
right:(out MySubItem **)p_right
forItem:(MyItem *)item
{
...
*p_left = aResult;
*p_right = anotherResult;
}
和
MySubItem *l = nil ;
MySubItem *r = nil ;
[Database getLeft:&l right:&r forItem:anItem];
self.leftItem = l ;
self.rightItem = r ;
更新:我找到了不需要两步的解决方案...我认为self.leftItem和self.rightItem是强属性,如果不是,请使用__weak代替。
+ (void)getLeft:(out NSObject * __strong *)p_left
right:(out NSObject * __strong *)p_right
forItem:(NSObject *)item
{
*p_left = nil;
*p_right = nil;
}
不能使用self.leftItem,请改用_leftItem。
[Database getLeft:&_leftItem right:&_rightItem forItem:anItem];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句