好的,所以我一直收到一个EXC_BAD_ACCESS错误,我猜这个错误很像C中的seg错误错误。
我的书并没有真正详细说明其中一些细节,所以我需要一些帮助。
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSDateComponents *comps = [[NSDateComponents alloc ]init];
[comps setYear:1984];
[comps setMonth:7];
[comps setDay:18];
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
NSCalendar *g =[[NSCalendar alloc ]init];
NSDate *dateofbirth = [g dateFromComponents:comps];
NSDate *now = [NSDate date];
double timeSince = [now timeIntervalSinceDate:dateofbirth ];
NSLog(@"your age %@", timeSince);
[pool drain];
return 0;
}
我认为我遇到了麻烦,因为我正在初始化并在池中分配内存。这是对的吗?
答案 0 :(得分:2)
NSLog字符串中的“%@”需要一个对象,但是你传入了一个double。尝试:
NSLog(@"your age %lf", timeSince);
具体来说,“%@”尝试在参数上调用-message。由于你的参数是double,运行时最终会尝试将double视为指针,并取消引用它(导致你的EXC_BAD_ACCESS)。
就内存管理而言,您正在泄漏comps
和g
。在程序结束时,添加:
[comps release];
[g release];
虽然这不会导致你的错误(也不会真正伤害任何东西,因为你正在退出并且操作系统正在回收内存。但是当你学习Objective-C时,不会在其他地方释放你的对象会导致泄漏)