我是Objective-C世界的新手,所以我对类成员声明有几个问题。请注意以下代码中的注释:
在头文件中我有代码
@interface MyClass : NSObject {
//what we points here ? Object or something else ?
NSString *myString;
}
// In interface we declare NSTring *myString in @property declaration is (NSString *) myString.
// What is the difference here ? Why we don`t use the same declaration as above ?
@property(nonatomic, retain) (NSString *) myString;
@end
答案 0 :(得分:1)
您缺少的是不从外部访问实例变量(在花括号之间定义)(即其他对象)。要做到这一点 - 你必须为实例var定义一个属性(通过使用@property
关键字)来了解外部对象如何访问给定实例var的值。同样在实现文件(.m)中,您必须使用@synthesize
实例变量访问器方法才能获得适当的属性。请注意,@property
声明不仅会定义它所拥有的内容(NSString *myString
),还会定义如何访问和设置。您可以将属性定义为只读(@property (readonly)...
),也可以一次从几个线程(@property (nonatomic)
)访问。
此外 - 如果您的实例var的名称与它代表的其他对象的属性不同 - 您必须在实现文件(@synthesize propertyName=instanveVariableName
)中显示
<强>更新强>
MyClass *myInstance = [[MyClass alloc] init];
[myInstance myString]; // returns myString property
尝试在不使用@property
的情况下运行2行代码,您将看到差异。
答案 1 :(得分:0)
实际上你是在定义一个yar类的属性。
@interface MyClass : NSObject { //public object @public NSString *myString; //private object NSString *myString2; }
答案 2 :(得分:0)
obj-c的类结构
.h文件
@interface MyClass : NSObject {
//Your member variable;
// you member objects;
}
//property declarations
//function declarations
@end
所以看起来应该是
@interface MyClass : NSObject {
NSString *str;
}
@property(nanatomic,retain) NSString *str;
-(void)method;
@end