gpt4 book ai didi

ios基本页面 View Controller 值分配

转载 作者:行者123 更新时间:2023-11-29 04:46:41 26 4
gpt4 key购买 nike

我正在将基本 View Controller 用于其他一些 View Controller ,

我将其作为基础,因为我有 4 到 6 个其他 View Controller 将显示相同的标签和图像...

所以我尝试创建这个基页并将其他 ViewController 子类化,

我的疑问是,如果我将 dealloc 留给包含标签值和其他字符串的字符串,那么当为该页面调用 dealloc 时,我会收到异常

pointer being freed was not allocated

但我不想只是注释掉标签的释放,

那么我做错了什么,错过了什么?

这里是基本页面

#import "BasePage.h"
@implementation BasePage
@synthesize titleString = _titleString;
@synthesize justifyTitleString = _justifyTitleString;

- (void) dealloc {
[_titleString dealloc];
[_justifyTitleString dealloc];
[super dealloc];
}
- (id)initWithParams:(NSString *)title :(NSString *)justifyTitle
{
self = [super init];
if (self) {
self.titleString = title;
self.justifyTitleString = justifyTitle;
}
return self;
}

我的应用程序使用导航 Controller ,所以当我调用页面时我使用:

   CentresVC *centresVC = [[[CentresVC alloc]initWithParams:[NSString stringWithFormat:@"Centre  %d", indexPath.row]:@"center"]autorelease];
[self.navigationController pushViewController:centresVC animated:YES];

并在返回时弹出 View ,

  • 所以我对什么时候使用有疑问
 [_titleString dealloc];      
[_justifyTitleString dealloc];

这些标签的指针保存在哪里?,如果我只是注释掉,这看起来不太好,我会得到内存泄漏并导致崩溃吗?

如何解决这个问题?

谢谢!

最佳答案

正如 Richard 所说,您不应该调用其他对象的 dealloc 方法。曾经。

如果 titleStringjustifyTitleString 是保留/强属性,那么下面的这个版本就可以工作。假设没有其他对象保留 titleStringjustifyTitleString,它们的保留计数将变为 0,并且它们的 dealloc 方法将被自动调用。

- (void) dealloc {
[_titleString release];
[_justifyTitleString release];
[super dealloc];
}

下一个选项也可以工作,因为强/保留属性的合成 setter 会在分配新值之前将 release 发送到属性的旧值。此外,如果您已重写 setter 以对旧值进行额外的清理,那么这将是首选。

- (void) dealloc {
self.titleString = nil;
self.justifyTitleString = nil;
[super dealloc];
}

最后,如果您使用 ARC,并且不需要像上面第二种情况那样进行额外的清理,则根本不需要重写 dealloc。但如果您确实需要重写 dealloc,则可以省略 [super dealloc],因为编译器会自动提供它。

关于ios基本页面 View Controller 值分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com