私は読んでいます:http://cocoacast.com/?q=node/103
上記のページでこの方法に出くわしました:
-(void)foo
{
self->iVar = 5; //legal because we are referencing a member variable
iVar = r; // illegal because we are referencing a readonly property
}
次に、Xcode でプロジェクトを作成しました。
Test0.h
#import <Foundation/Foundation.h>
@interface Test0 : NSObject
{
@private int iVar;
}
@property (readonly, assign) int iVar;
- (void) foo;
@end
Test0.m
#import "Test0.h"
@implementation Test0
@synthesize iVar;
- (void) foo
{
iVar = 5;
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Test0.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Test0 *t1 = [[Test0 alloc] init];
[t1 foo];
NSLog(@"%d", t1.iVar);
}
return 0;
}
コンソールの結果は 5 です。
私の質問:
- 上記の Web ページでは、self->iVar = 5 を使用しています iVar = 5 を使用しました
どんな違いがあるの?
- 上記の Web ページには、iVar = r; と書かれています。// 読み取り専用プロパティを参照しているため、違法です
iVar = 5 (私が使用したもの) は iVar = r と同じではありませんか? どのように違法ではないのですか?