在objective-C类中声明一个数组型成员变量的property

我在做OpenGL的一个小测试程序时碰到需要定义数组的情况,然后就在一个objc类中定义了一个数组,不过后面问题来了,我该如何为它声明property呢?请见下列示例代码:
//test.h
@interface MyTest : NSObject {
int myArray[5];
}
@end
如果采用
@property  int myArray[5];
肯定会出错。
因为@property的声明指示编译器默认地给myArray添加了myArray以及setMyArray的这样一对getter和setter方法。由于objective-C中方法的返回类型不能是数组,所以上述声明property的方式是通不过编译的。
正确的方式是:
//test.h
@ interface MyTest : NSObject {
int myArray[5];
}
- ( void)outPutValues;
@property  int* myArray;
@end
即,使用指针来表示返回类型并作为参数设置类型。
不过这样一来就无法在.m文件的实现中使用@synthesize,而是需要显式地实现这对方法
#import
#import  "test.h"
#include

@implementation MyTest

- ( int*)myArray
{
return myArray;
}

- ( void)setMyArray:( int*)anArray
{
if(anArray != NULL)
{
for( int i=0; i<5; i++)
myArray[i] = anArray[i];
}
}

- ( void)outPutValues
{
int a[5];
for( int i=0; i<5; i++)
printf( "%d ", (myArray)[i]);
}

@end


int main ( int argc,  const  char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here...
int a[] = { [4] = 100 };
MyTest *myTest = [[MyTest alloc] init];

[myTest setMyArray:a];
NSLog( @"The fifth value is: %d", [myTest myArray][4]);
[myTest outPutValues];

[myTest release];
[pool drain];
return 0;
}
这样一来对于数组型变量成员就无法使用点(.)操作符来抽象掉对setter和getter的调用(使用点操作符访问对象的成员数据非常方便,根据索要访问的数据成员处于左值还是右值而由编译器自动判定调用setter还是getter)。
另外,setMyArray的参数类型可以是const:
- ( void)setMyArray:( const  int*)anArray
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值