Я читаю: 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.
Мои вопросы:
- Веб-страница использует упомянутые выше self-> Ивар = 5 Я использовал Ивар = 5
Что разница?
- На упомянутой выше веб-странице iVar = r; // незаконно, потому что мы ссылаемся на свойство readonly.
Является ли iVar = 5 (который я использовал) не такой, как iVar = r? Как это не противозаконно?
Эта статья неверна. 'self-> iVar = 5' и' iVar = 5' точно такие же. 'self.iVar = 5' было бы незаконным. – ughoavgfhw