增量属性int(self.int ++)

时间:2010-06-25 12:18:18

标签: iphone objective-c integer

如何增加整数属性?

你无法做self.integer++,你可以做integer++,但我不确定会不会保留它......

最后一个会保留“整数”的值吗?

感谢。

2 个答案:

答案 0 :(得分:3)

integer++有效,因为您直接访问integer并为integer分配新值,而不是发送消息和使用访问者。假设integer被声明为NSInteger属性,以下语句将对整数值产生相同的影响,但直接访问不符合KVO。

[self setInteger:0];
self.integer = self.integer + 1; // use generated accessors
NSLog(@"Integer is :%d",[self integer]); // Integer is: 1
integer++;
NSLog(@"Integer is :%d",[self integer]); // Integer is: 2

答案 1 :(得分:0)

我相信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(当您处理属性时 - 而不是结构)