确定基本上,我在iPhone应用程序中有一个类,我希望它只读一些propertys。这意味着拥有的类可以读取和写入属性,但其他对象只能读取它。当我声明属性时,我尝试“只读”选项,但是我的班级甚至无法写入它。那有什么用处?在iOS中创建iPhone属性只读objective-c
2
A
回答
3
如果不是太不方便,只需在你的类中使用ivar或“backing”变量来修改该值。就像这样:
在您的.h文件中:
@interface ClassName
@property (readonly,nonatomic) NSInteger readOnlyValue;
@end
在您.m文件:
@implementation ClassName
@synthesize readOnlyValue = _readOnlyValue;
_readOnlyValue = 42;
@end
0
你可以在.m类中实现你自己的setter或者synteshize为: foo = _foo;所以你可以在内部调用_foo(私有变量)
0
在进一步思考,实现这一目标的最简单的方法是添加一个正常的财产一个类扩展,然后在头中声明一个getter。例如。
接口:
@interface MyClass: NSObject
- (NSString *)someString;
@end
实现:
@interface MyClass()
@property (nonatomic, retain) NSString *someString;
@end
@implementation MyClass
@synthesize someString;
@end
您可以获取和设置,使用点符号或其他方式,并直接在类内访问someString
实例变量,和每个看过界面的人都可以使用点符号或其他方式获得。
2
虽然你可以像其他答案中描述的那样去直接访问iVar,但更好的解决方案通常是使用类扩展。它们的设计正好是为了解决这个问题,通过使用它们,您可以稍后重构代码,以便将@property
的readwrite
定义暴露给应用中的其他类,而不会将其暴露给所有类。
前段时间我写了一个detailed explanation。
6
我们假设您想在的类中创建一个名为foo
的属性int
。
执行此操作界面中的任何文件(.h):
@property(readonly) int foo;
然后在你的实现(.M)文件,建立一个类扩展,你可以重新定义你的财产。
@interface YourClass()
@property(readwrite) int foo;
@end
这将导致财产被readonly
公开,但私下里readwrite
。
然后,当然,你在下面的实现中合成foo
。
@synthesize foo;
相关问题
- 1. 如何创建只读属性
- 2. 在cocos2d中创建指针属性iPhone
- 3. 如何在Ruby模型中创建只读虚拟属性
- 4. 在Python中创建一个类实例属性只读
- 5. 如何在C#中创建只读对象属性?
- 6. 只读属性
- 7. 创建多个只读属性动态地在AS3
- 8. 只读属性,在C#6.0
- 9. PHP中的只读属性?
- 10. ScriptControlDescriptor.AddProperty&只读属性
- 11. OData只读属性
- 12. 只读VS自动(只读)属性
- 13. 在派生类中使属性只读
- 14. 创建具有几个只读属性的类的实例
- 15. JAXB可以创建“只读”类属性吗?
- 16. 如何创建只读依赖项属性?
- 17. 我可以创建一个只读的依赖项属性吗?
- 18. 在sysfs中创建属性
- 19. NHibernate中的反向属性和只读属性在做什么?
- 20. 的ObjectiveC,创建类的
- 21. 删除只读属性
- 22. 只读属性类扩展
- 23. 属性:“分配”与“只读”
- 24. 使用weak只读属性?
- 25. Object.defineProperty覆盖只读属性
- 26. AS3:属性为只读
- 27. 只读自定义属性
- 28. BLToolkit:公共只读属性
- 29. VB.net自动属性 - 只读?
- 30. 如何在itext7中创建只读PDF
我会试试看。谢谢。 – 2012-04-13 21:41:23
这是简化的,因为你使用原始类型。如果readOnlyValue将是一个Object,例如UILabel,那么保留版本呢? – AlexWien 2012-12-01 16:03:33