Я считаю, что Obj-C был обновлен в последние год или два, так что этот вид кода работает. Я написал быстрый тест и обнаружил, что следующий код действителен и работает:
в моем .h:
#import <Cocoa/Cocoa.h>
@interface TheAppDelegate : NSObject <NSApplicationDelegate> {
NSUInteger value;
}
@property NSUInteger otherValue;
- (NSUInteger) value;
- (void) setValue:(NSUInteger)value;
@end
По моему .m:
#import "TheAppDelegate.h"
@implementation TheAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
value = self.otherValue = 1;
NSLog(@"%lu %lu", (unsigned long)value, (unsigned long)self.value);
NSLog(@"%lu %lu", (unsigned long)_otherValue, (unsigned long)self.otherValue);
self.value++;
self.otherValue++;
NSLog(@"%lu %lu", (unsigned long)value, (unsigned long)self.value);
NSLog(@"%lu %lu", (unsigned long)_otherValue, (unsigned long)self.otherValue);
}
- (NSUInteger) value
{
return value;
}
- (void) setValue:(NSUInteger)_value
{
value = _value;
}
@end
Мой вывод:
1 1
1 1
2 2
2 2
Я полагаю, что где-то есть технический документ, который я читаю, который объясняет это, но я не могу вспомнить, где я его нашел. Я полагаю, что это говорит что-то вроде:
x++
будет изменено на x+=1
И это x+=y
будет заменено на x=x+y
Далее, x=y.a=z
будет заменено на y.a=z,x=y.a
(для случаев, когда вы имеете дело со свойствами, а не с структурами)