关于班级成员声明的问题

时间:2011-03-09 10:30:21

标签: objective-c

我是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

3 个答案:

答案 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