我有一个mutableArray(数组),element是一个字典(item),每个项目都有两个键,一个指向一个字典,另一个指向一个mutableArray(subArray)。
问题是:使用数组后,我应该清理它。 我应该这样做:[array removeAllObjects]; 或者我需要迭代数组来调用:[subArray removeAllObjects];
换句话说,红色框中的代码是否必要?
答案 0 :(得分:1)
+ (void)clearShoppingCart {
[carItems removeAllObjects];
}
像Gerd说的那样。应用程序不会崩溃。
答案 1 :(得分:0)
for (NSMutableDictionary *dic in cartItems) {
[dic[@"products"] removeAllObjects];
}
[cartItems removeAllObjects];
和
[cartItems removeAllObjects];
两个代码后:结果将
cartItems是空字典
答案 2 :(得分:0)
您只需要释放cartItems对象,最终将清除所有内容。
self.cartItems = nil
答案 3 :(得分:0)
如果$row_array= array();
while ($row = mysqli_fetch_assoc($result)) {
$tmp = array();
$tmp['title'] = $row['title'];
$tmp['year'] = $row['year'];
$tmp['author'] = $row['author'];
$tmp['journal'] = $row['journal'];
$tmp['keywords'] = $row['keywords'];
$tmp['abstract'] = $row['abstract'];
$tmp['url'] = $row['url'];
$row_array[] = $tmp;
}
echo '{"data":';
echo json_encode($row_array);
echo '}';
不归其他实例所有,则dic[@"products"]
足以删除所有内容。
但是,如果[cartItems removeAllObjects]
由另一个实例拥有。例如,
dic[@"products"]
答案 4 :(得分:0)
我怀疑这种清理是否必要。
我想说这取决于所包含对象的引用计数。比如,@ [A,B,C],是否有指向A,B或C的指针?
首先,我想提醒ARC在Objective-c的基础上工作 对象的引用计数。如果计数变为0,它将是 dealloc很快。
让我们把它分解成案例, let container = Array或Dictionary。
在您的情况下,如果self.cartItems指向的数组(例如,X)仅由self.cartItems指向。当你的self.cartItems = nil,因为没有更多的指针指向X,X将dealloc,如果它满足“只有容器强持对象”,则会出现情况1
在你的情况下,
self.cartItems = @[A, B, C];
self.specialCartItem = A;
self.discountCartItem = C;
self.cartItems = nil
A和C仍然会在这里。至少你将self.specialCartItem和self.discountCartItem设置为nil;
因此,您可以预见它是否是嵌套容器。它只是在递归的基础上工作。
关键是没有其他侧强指针指向容器和对象。我会得出结论,你只需要使用你使用的每个指针。它应该没问题。
如果我错了,请纠正我。