在 Objective-C 中保留按值传递的变量可以吗?
在 Objective-C 中保留按值传递的变量可以吗?
也就是说:
- 我有控制器 1 我有一个传递给控制器 2 的变量,
- 它实际上是通过引用传递的,当用户单击控制器 2 UINavigationController 后退按钮时我可以使用它,因为该值将在控制器 1 中
- 修改控制器 2 我已经按照下面的代码设置了一个 ivar
问题 - 那么使用“保留”设置此控制器 2 变量是否可以,并且在“dealloc”方法中将其“释放”并设置为 nil ?也就是说它不会影响控制器1的对象?例如,如果控制器 2 被释放并且“release”和“=nil”被命中,会发生什么情况,这会影响对象,因为它仍然被控制器 1 使用。
控制器 2 代码摘录
@interface SelectorController : UITableViewController {
Config *_returnObject;
}
@property (nonatomic, retain) Config *returnObject;
@end
// implementation
@synthesize config;
- (void)dealloc
{
[config release]; config = nil;
[super dealloc];
}
is it OK to retain a variable passed by value in objective-c?
That is say:
- I have controller 1 I have a variable that I pass to controller 2
- it's effectively passed by reference and I can use this when the use clicks on the controller 2 UINavigationController backbutton, in that the value will be modified in controller 1
- in controller 2 I have setup a ivar per the code below
Question - So is it OK for this controller 2 variable to be set using "Retain", and also have it "released" and set to nil in the "dealloc" method? that is it won't affect the object for controller 1? What happens for example if controller 2 is deallocated and the "release" and "=nil" is hit, will this affect the object as it's still used by controller 1.
Controller 2 Code extract
@interface SelectorController : UITableViewController {
Config *_returnObject;
}
@property (nonatomic, retain) Config *returnObject;
@end
// implementation
@synthesize config;
- (void)dealloc
{
[config release]; config = nil;
[super dealloc];
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这取决于,您可以在视图控制器 2 中保留该变量。因为每个控制器都会对其变量负责。相反,如果您分配变量,即使您在第二个控制器中使用该变量,它也将由第一个控制器负责。
It depends, its ok for you to retain the variable in View Controller 2. Because each controller will be responsible for theirs variables. If instead, you assign your variable, even if you are using the variable in the second controller, it will be the first controller the responsible.
在控制器 2 中保留和释放变量是非常好的,这就是你应该这样做的方式。 :)
在控制器 2 中将变量设置为 nil,只会将变量设置为 nil,而不是将变量指向的内容设置为 nil,因此您的对象仍然存在,以便控制器 1 中的变量正常工作和。
Retaining and releasing the variable in controller 2 is more than OK, it's how you should do it. :)
Setting the variable to
nil
in the controller 2, will only set the variable to nil, not the stuff the variable points to, so your object will still be there for the variable in controller 1 to work with.