【发布时间】:2012-07-21 04:24:31
【问题描述】:
在 iOS 3.0 发布时,我曾做过一些 iOS 的开发,但两年来我都忘记了 iOS 的表现。
我记得你确实会在 iOS 3.0 中保留,即使如此,我仍然不记得保留在 setter 中的确切原因是什么。到目前为止,这只是困扰我的一件事。
最后但并非最不重要的一点是,在带有 ARC 的 iOS 5 中,默认情况下局部变量很强大。如果他们中的一些人没有二传手,他们怎么能强大呢? (例如,id。)
一些代码来解释我的意思:
+(double) popOperandOffStack:(NSMutableArray *) stack{
double result = 0;
id topOfStack = [stack lastObject];
// how is topOfStack retaining [stack lastObject] if it's simply id?
if (topOfStack) [stack removeLastObject];
if ([topOfStack isKindOfClass:[NSNumber class]]){
result = [topOfStack doubleValue];
}
else if ([topOfStack isKindOfClass:[NSString class]]){
if ([topOfStack isEqualToString:@"+"]){
result = [self popOperandOffStack:stack] + [self popOperandOffStack:stack];
}
if ([topOfStack isEqualToString:@"-"]){
result = [self popOperandOffStack:stack] - [self popOperandOffStack:stack];
}
if ([topOfStack isEqualToString:@"*"]){
result = [self popOperandOffStack:stack] * [self popOperandOffStack:stack];
}
if ([topOfStack isEqualToString:@"/"]){
result = [self popOperandOffStack:stack] / [self popOperandOffStack:stack];
}
}
return result;
}
【问题讨论】:
-
使用 ARC,您可以在不考虑保留/自动释放/释放的情况下进行编程。只需关心这一点,即可为属性声明创建的 ivar 和隐式 ivar 提供正确的强/弱属性。
-
你能解释清楚一点吗?我不明白你的意思。第二句。
-
“如果其中一些没有设置器”是什么意思?
-
topOfStack 正在持有另一个对象,并且在将其从 NSMutableArray 中删除之后仍然持有该对象。如果它只是类型 id,它是如何做到的? id 变量在后台有 setter 方法吗?
标签: iphone objective-c memory-management