iOS:@encode并使用 - >直接访问子类的属性

时间:2014-01-28 19:25:32

标签: ios objective-c c encode cgrect

我有一个NSMutableArray,其中我想存储一些CGRect

所以,我尝试使用以下(例如):

UIView *view = [[UIView alloc] initWithFrame:(CGRect){{0, 0}, 50, 50}];

[array1 addObject:[NSValue value:&view->frame withObjCType:@encode(CGRect)]];

但这会引发警告:&view->frame

这是一个属性,但我想直接访问它,以便我可以使用上面的语法并将其用于value:参数,如上所述。

我知道我可以访问&self->_view(如果我想将视图添加到数组中,这不是这里的情况),所以我尝试&view->frame(甚至是&view->_frame) ,但它会引起警告,但不起作用。

除非我先说明以下内容,否则将会这样做:

CGRect tempRect = view.frame; 
[array1 addObject:[NSValue value:&tempRect withObjCType:@encode(CGRect)]];

所以我的问题是 ,我在&view->frame(甚至:&view->_frame)做错了什么?

并且有一种方法可以在不必先执行此操作的情况下执行此操作:

CGRect tempRect = view.frame;
[array1 addObject:[NSValue value:&view->frame withObjCType:@encode(CGRect)]];

换句话说,我可以在这里使用强制转换而无需先创建CGRect(tempRect)吗?

附录:

如果我的记忆服务,我认为在C中&上施放是无效的。我不确定,如果我的记忆是正确的,请告诉我。

1 个答案:

答案 0 :(得分:2)

[array1 addObject:[NSValue valueWithCGRect:view.frame]];

CGRect rect = [[array1 lastObject] CGRectValue];

文档:NSValue UIKit Additions Reference