作为一种惯例,你不应该在 @implementation 周围放置花括号。
关于你的问题:我看到你尝试分配数组的方式存在以下错误:
当你初始化一个新的 ObjC 实例对象时,它的实例变量会被设置为零,所以你的数组将是 a[0] == a[1] == a[2] == 0。这是因为分配器会要求堆内存大小等于你的对象加上其祖先的大小。但是在代码的后面,你尝试从栈复制内存到堆:{4,5,6} 数组是在栈上创建的,而 array[] 存在于堆上。你看到这里的问题了吗?如果你坚持这样做,我会这样做:
#import <Foundation/Foundation.h>
@interface Bla : NSObject
{
int array[3];
}
- (void)checkArray;
@end
@implementation Bla
- (id)init
{
self = [super init];
if (self) {
int tmpArray[3] = { 4, 5, 6};
memcpy(array, tmpArray, 3 * sizeof(int));
}
return self;
}
- (void)checkArray
{
NSAssert(array[0] == 4, @"invalid array initialization (4)");
NSAssert(array[1] == 5, @"invalid array initialization (5)");
NSAssert(array[2] == 6, @"invalid array initialization (6)");
}
@end
int main() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
{
Bla *bla = [[Bla alloc] init];
[bla checkArray];
NSLog(@"done");
[bla release];
}
[pool release];
return 0;
}
这不是最好的方法,也许你想坚持使用malloc,但这样做你就不必后来释放数组。另外,请记住,用这种方式,您将无法更改array[]的大小,这样做肯定会有麻烦 :)