【问题标题】:NSArray will not initialize in my MVC viewNSArray 不会在我的 MVC 视图中初始化
【发布时间】:2011-05-13 06:38:35
【问题描述】:

我在 ObjC 中编写的前几个程序运行良好,但杂乱无章,所以这次我想把它做好并使用 MVC。在我尝试通过 VC 将模型中的 NSMutableArray 复制到视图之前,所有部件都可以工作并且已经过测试并且一切都很好。使用了完全相同的格式和代码,并且在程序的另一个方面可以正常工作,但是这个特定的视图使用 drawRect 并且如果我不保留数组就会中断。当我这样做时,它会导致泄漏。为了隔离问题并创建解决方法,我最终直接从 pList 加载数组。它看起来像这样:

@interface HWView : UIView <UIGestureRecognizerDelegate>
{
NSMutableArray *drawStates; 
}
@property (nonatomic, retain) NSMutableArray *drawStates; 

在.m中

@implementation HWView

@synthesize drawStates;

- (void)awakeFromNib
{
[self HWVReset];
}
-(void)HWVReset
{
NSLog(@"HWVReset:");
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES)   objectAtIndex:0];
NSString *plistPath = [documentsDirectorystringByAppendingPathComponent: @"PLIST_drawState.plist"];
self.drawStates = [[NSMutableArray arrayWithContentsOfFile:plistPath]retain];
NSLog(@"drawStates:%@",self.drawStates);
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect 
{
//draw code
}
- (void)dealloc 
{
[self.drawStates release];
[super dealloc];
}

所以它运行但它泄漏。我从以下位置删除保留:“self.drawStates = [[NSMutableArray arrayWithContentsOfFile:plistPath]retain];”它崩溃了。任何帮助表示赞赏。

【问题讨论】:

  • 也许你想要强而不是保留?

标签: cocoa-touch memory-leaks nsarray drawrect


【解决方案1】:

当然:[NSArray 数组] 是一个自动释放的对象。因此,您将调用一个已释放的对象。阅读 Apple 文档中的 Autorelease。

【讨论】:

  • 感谢您的评论 - 我已按照您的建议阅读了有关自动发布的文档,但恐怕这是我对需要帮助的信息的交互。显然答案就在那里,但我仍然看不到它。通过调用retain,我增加了计数并保留了对象,因此程序不会崩溃......我在哪里释放它以阻止泄漏而不会再次崩溃?每次我将 release 放在任何地方都会崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多