嗨,我是Objective-C
編程的新手。今天我正在編寫一個程序,我對它的行爲方式感到困惑。下面是程序:合成的getter不能用於NSString類型的實例變量
#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;
}
在主功能時,我嘗試打印使用getStr
合成訪問它給了我錯誤的STR值。爲什麼這樣?我們是否被允許爲NSString
使用合成getter
或者我沒有以正確的方式使用getter
?但仍然合成的setter
[obj setStr]
設置NSString
類型的值。 我在這裏和那裏看到了關於堆棧溢出的這類問題的一些答案,但我真的不知道在那裏提供的答案,所以請以簡單的方式爲我解釋這個問題。非常感謝。
TNX很多。我不知道屬性xyz的合成getter的名稱與屬性的名稱相同。日Thnx。 – iamyogish