嗨,我是Objective-C
编程新手。今天我正在编写一个程序,我对它的行为方式感到很困惑。这是程序:
#import <Foundation/Foundation.h>
@interface MyClass:NSObject
{
NSString * str;
}
@property NSString * str;
@end;
@implementation MyClass
@synthesize str;
@end
int main()
{ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];
MyClass * obj = [[MyClass alloc]init];
[obj setStr: @"hello"];
/* the following lines of code will give error if not commented but why it is
resulting in error ?????
NSLog(@"Str = %@",[obj getStr]); // **gives error if not commented**
**or**
NSString * temp;
temp = [obj getStr]; // gives error
NSLog(@"%@",temp);
*/
NSString * temp;
temp = obj.str;
NSLog(@"%@",temp); // works just fine
[pool drain];
return 0;
}
在 main 函数中,当我尝试使用getStr
合成访问器打印 str 值时,它给了我错误。为什么这样?我们不允许使用合成getter
的,NSString
还是我没有getter
以正确的方式使用?但仍然综合setter
[obj setStr]
设置NSString
类型的值。我在这里和那里看到了一些关于堆栈溢出问题的答案,但我真的不明白那里提供的答案,所以请用简单的方式为我解释一下。非常感谢。