【问题标题】:iPhone getting compile error ABC Functions forbid explocit messages send of dealoc [duplicate]iPhone得到编译错误ABC函数禁止发送dealloc的显式消息[重复]
【发布时间】:2012-05-22 19:13:58
【问题描述】:

当我尝试构建我的项目时,我收到以下错误消息

ABC函数禁止dealoc的exploit消息发送

- (void)dealloc {
    [super dealloc];
}

这是类定义:

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>


@interface cPlay : UIViewController{
    MPMoviePlayerController *mp;

}
- (void) moviePlayBackDidFinish:(NSNotification*)notification;
-(void) NewVideo : (NSString *) strName;
@end

【问题讨论】:

标签: ios


【解决方案1】:

只要去掉dealloc函数,ARC(自动引用计数)不允许自己dealloc。 ARC 会为您做到这一点。

查看此链接:

http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

我喜欢 ARC 的一件事是,在大多数情况下,它完全消除了 > 编写 dealloc 方法的需要。当一个对象被释放时,它的实例变量和
合成的属性会自动释放。你不再需要写:

- (void)dealloc
{
    [_window release];
    [_viewController release];
   [super dealloc];
}

因为现在 Objective-C 会自动处理这个问题。事实上,甚至不可能 > 再写上面的内容了。在 ARC 下你不能调用 release,也不能 [super
解除锁定]。你仍然可以实现 dealloc——稍后你会看到一个例子——但是 不再需要手动释放您的 ivars。

【讨论】:

  • 您好,感谢您回答我的问题,
【解决方案2】:

使用ARC时,一般不需要为内存管理编写dealloc方法,因为编译器会为你插入所有必要的代码,如果你真的需要不要在里面调用[super dealloc]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2013-10-31
    • 1970-01-01
    • 2013-03-11
    • 2016-12-13
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多