【发布时间】:2013-05-17 10:31:32
【问题描述】:
我想创建一个由 CGRect 指针数组构成的属性,数字没有在开头定义,所以我想创建一个指向包含该数组开头的内存区域的指针的指针。这似乎很困难,我已经看到了不同的答案并以此为基础。
到目前为止,我已经写过:
@interface ViewController ()
@property (assign) CGRect * rectArray;
@property (strong, nonatomic) NSArray * hotspots;
@end
@implementation ViewController
- (CGRect *) createRectArray {
int count = _hotspots.count;
_rectArray = malloc(sizeof(CGRect*)*count);
for (int i = 0; i<count; i++) {
CGRect currentFrame = ((UIView*)_hotspots[i]).frame;
_rectArray[i] = ¤tFrame;
}
return _rectArray;
}
@end
但编译器抱怨告诉我分配不正确。
我猜可能正确的变量不是CGRect * rectArray,而是双重间接CGRect ** rectArray。
那是对的吗?
[更新]
实际上我想做的事情没有意义......因为属性 -frame 返回 CGRect 的副本而不是指向它的指针,所以我直接快速访问它的想法已经不复存在了。
【问题讨论】:
-
这是完整的类定义吗?好像少了点什么……
-
当然不是...我已经删除了所有不必要的方法
-
@Andrea 你想做什么“打破封装”;它暴露了 UIView 内部实现的细节,而不是正确使用提供的访问器。您不应该存储指向访问器返回内容的指针,您应该始终直接使用访问器。
-
顺便说一句,
UIView上的frame不是一块内存。UIView仅存储bounds和center。frame只是一个方便的访问器,它将两个属性合并在一起。 -
@wilsonmichaelpatrick 是的,这在概念上是错误的,我想那是因为我生病了,而且我的思想正在绊倒。谢谢你的评论
标签: objective-c c memory