Objective c 修改Obj-C中的数组(由getter返回,例如int**)
假设有一个类:Objective c 修改Obj-C中的数组(由getter返回,例如int**),objective-c,arrays,getter,Objective C,Arrays,Getter,假设有一个类: @interface FooBar : NSObject @property(readonly, getter = _getSpace) int** space; @end 空间属性的实现方式如下所示: @implementation FooBar int m_space1[256]; int m_space2[256]; int* m_space[2] = { m_space1, m_space2}; -(int **) _getSpace { return
@interface FooBar : NSObject
@property(readonly, getter = _getSpace) int** space;
@end
空间属性的实现方式如下所示:
@implementation FooBar
int m_space1[256];
int m_space2[256];
int* m_space[2] = { m_space1, m_space2};
-(int **) _getSpace {
return m_space;
}
@end
使用以下命令更改int[2][256]数组是否合法:
FooBar * f = [[FooBar alloc] init];
f.space[1][120] = 0;
是的。您将返回一个指针,然后修改所指向的值。这是完全合法的。如果不想允许这样做,则需要向类型添加适当的常量修饰符 不合法的是返回一个结构并直接修改该结构
正如KennyTM在评论中提到的,您的
m_空间{,1,2}
变量是全局变量,而不是您可能想要的实例变量。解决此问题的最简单方法是在@实现中放置一个ivar块,如中所示
@implementation FooBar {
int m_space1[256];
int m_space2[256];
int* m_space[2] = { m_space1, m_space2 };
}
-(int **) _getSpace {
return m_space;
}
@end
对。您将返回一个指针,然后修改所指向的值。这是完全合法的。如果不想允许这样做,则需要向类型添加适当的常量修饰符
不合法的是返回一个结构并直接修改该结构
正如KennyTM在评论中提到的,您的m_空间{,1,2}
变量是全局变量,而不是您可能想要的实例变量。解决此问题的最简单方法是在@实现中放置一个ivar块,如中所示
@implementation FooBar {
int m_space1[256];
int m_space2[256];
int* m_space[2] = { m_space1, m_space2 };
}
-(int **) _getSpace {
return m_space;
}
@end
我还想说,虽然有效,但这是一种非典型模式。我的问题确实是由你提到的类似结构案例引发的。我还想说,虽然有效,但这是一种非典型模式。我的问题确实是由你提到的类似结构案例引发的。请注意m_space1
,m_space2
和m_space
将声明为全局变量,尽管它们位于@implementation FooBar
中?所以每个FooBar实例不会有单独的m_space*成员集?对。如果您需要实例变量,请将它们放入@interface{…}
@Calikin:正如KennyTM所建议的那样,我已经更新了我的答案,以说明如何使它们成为IVAR。请注意,MU space1
,MU space2
和MU space
将被声明为全局变量,尽管它们在@implementation FooBar
.Global中?所以每个FooBar实例不会有单独的m_space*成员集?对。如果您需要实例变量,请将它们放入@interface{…}
@Calikin:正如KennyTM所建议的,我已经更新了我的答案,以展示如何使它们成为IVAR。