【问题标题】:exc_bad_access with GridView, possible memory management fail?exc_bad_access 与 GridView,可能的内存管理失败?
【发布时间】:2012-03-07 06:04:21
【问题描述】:

我有以下代码尝试设置 GridView,并且我有一个管理数据源的 GridviewController 子类。这是用于设置它的代码。

            AQGridView* gridView = [[AQGridView alloc] initWithFrame:frame];
            NUBMyCpGridviewController* controller = [[NUBMyCpGridviewController alloc] init];
            gridView.dataSource = controller;
            gridView.delegate = controller;
            [gridView reloadData];

但是,应用在尝试访问数据源时会崩溃。这是尝试调用该方法并使其崩溃的行(在 Gridview 类中):

AQGridViewCell * cell = [_dataSource gridView: self cellForItemAtIndex: index];

错误是 exc_bad_access。可能是什么问题呢?是不是因为对象被释放得太早了?我该如何纠正它?

【问题讨论】:

    标签: objective-c ios ios5 aqgridview


    【解决方案1】:

    你是对的;问题很可能是您的NUBMyCpGridviewController 正在被释放。根据您的代码 sn-p 看起来没有人保留它。

    我的建议是将其设置为 strong @property,无论您的 sn-p 代码在哪个类中执行。

    【讨论】:

    • 我正在使用 ARC。我怎么做?我是否向类或对象添加了强属性?我必须在头文件中这样做吗?
    • 无论您是否使用 ARC,只需将 @property (strong) NUBMyCpGridviewController* controller; 放入您的 .h 中,@synthesize controller; 放入您的 .m 中,然后在上面的代码中使用 self.controller 而不是 @987654327 @.
    • P.S.如果你问这样的问题,你可能应该在有机会的时候去阅读一些 Apple 关于 Objective-C 和 Cocoa 的基本教程。
    • 我知道这一点,但我必须像这样声明所有强对象吗?这是我对 obj c 的悲痛。它迟钝的烦人。而且我什至没有免费的私有方法。
    • 我不完全确定你在问什么,但如果你不希望对象被释放,那么就必须有人拥有它。这意味着某些东西需要对其有强烈的引用。它不一定是@property:例如,它可能在其他人保留的容器内(因为容器保留了它们的元素)。但如果没有人拥有一件物品,它就不会留下来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多