Назначение указателей объектов - PullRequest
2 голосов
/ 25 августа 2011

Правильно ли назначено указатель?

customclass.somearray = &*otherarray;

, где somearray и otherarray являются NSArray объектами. Если нет, то как мне решить мою проблему:
Я хочу поделиться этим otherarray объектом с customclass.somearray. И я хочу все изменения сделано в customclass.somearray, чтобы быть сделанным в оригинальном otherarray тоже. Делая это таким образом, это работает. Я просто хочу спросить, это правильно?

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Ваши две переменные являются указателями одного типа, поэтому просто присвойте одну другой другой:

customclass.somearray = otherarray;

То, как вы это написали, не нужно. Использование оператора разыменования * по существу дает вам «содержимое» указателя. Адрес оператора & соответственно дает вам адрес, к которому вы его применяете. Ваш указатель otherarray содержит адрес. Если вы разыменуете этот адрес, а затем берете его, вы в конечном итоге возвращаетесь туда, откуда начали.

Имейте в виду, что левая сторона этого присваивания является доступом к свойству (при условии, что customclass также является объектом, а не просто struct). Это означает, что компилятор изменит ваше выражение на:

[customclass setSomearray:&*otherarray];
// And my version will be changed into:
[customclass setSomearray:otherarray];

То есть он становится вызовом метода, а не простым присваиванием. Однако это не влияет на синтаксис, который вы должны использовать.

2 голосов
/ 25 августа 2011

Работая в Objective-C, вы никогда не имеете дело с объектами напрямую, а всегда обращаетесь к ним через указатели. Всегда. Например, в C ++ вы можете объявить фактический объект в стеке, но вы никогда не сделаете этого в Objective-C. Итак, если у вас есть:

NSArray *otherArray = [NSArray arrayWithObjects:@"foo", @"bar", nil];

тогда otherArray - это указатель на экземпляр NSArray. Аналогично, ваше свойство somearray будет иметь тип NSArray*, поэтому типы будут совпадать, и вы можете просто назначить одно другому:

customclass.somearray = otherarray;

Надеюсь, это поможет.

...