Инкрементное свойство int (self.int ++) - PullRequest
2 голосов
/ 25 июня 2010

Как вы можете увеличить целочисленное свойство?

Вы не можете сделать self.integer++, вы можете сделать integer++, но я не уверен, что это сохранится или нет,

Будет ли последний сохранять значение "целое число"?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 июня 2010

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
0 голосов
/ 24 августа 2013

Я считаю, что 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 (для случаев, когда вы имеете дело со свойствами, а не с структурами)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...