注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚天剑

青春要在奔跑中度过

 
 
 

日志

 
 
 
 

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

2012-11-07 10:14:43|  分类: 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
我在做OpenGL的一个小测试程序时碰到需要定义数组的情况,然后就在一个objc类中定义了一个数组,不过后面问题来了,我该如何为它声明property呢?请见下列示例代码:
1
2
3
4
5
//test.h
@interface MyTest : NSObject {
    int myArray[5];
}
@end

如果采用
1
@property int myArray[5];
肯定会出错。
因为@property的声明指示编译器默认地给myArray添加了myArray以及setMyArray的这样一对getter和setter方法。由于objective-C中方法的返回类型不能是数组,所以上述声明property的方式是通不过编译的。
正确的方式是:
1
2
3
4
5
6
7
//test.h
@interface MyTest : NSObject {
    int myArray[5];
}
- (void)outPutValues;
@property int* myArray;
@end

即,使用指针来表示返回类型并作为参数设置类型。
不过这样一来就无法在.m文件的实现中使用@synthesize,而是需要显式地实现这对方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#import <foundation foundation.h="">
#import "test.h"
#include <stdio.h>
 
@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;
}
</stdio.h></foundation>

这样一来对于数组型变量成员就无法使用点(.)操作符来抽象掉对setter和getter的调用(使用点操作符访问对象的成员数据非常方便,根据索要访问的数据成员处于左值还是右值而由编译器自动判定调用setter还是getter)。 



  评论这张
 
阅读(179)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017