Указатели переменной экземпляра Objective C

1126 Еще нет. В Neo4j 2.0 было введено более удобное для шифрования индексирование, и вы можете выполнить некоторые команды DDL для создания и удаления индексов и ограничений, но по состоянию на 2.01 это все (см. документы ). В 1.9 вы вообще не можете определить этот тип схемы с шифром.

-

Существует множество способов выхода за пределы шифра, например,

В neo4j-shell вы можете

  • перечислить унаследованные индексы с помощью index --indexes
  • перечислить все индексы и ограничения меток с помощью schema
  • перечислить индексы и ограничения для конкретной метки с помощью schema ls -l :YourLabel

В neo4j-browser вы можете

  • перечисляют все индексы и ограничения меток с помощью :schema
  • перечисляют индексы и ограничения для конкретной метки с помощью :schema ls -l :YourLabel

Большинство API, которые позволяют выполнять запросы шифрования также предоставит способы запроса схемы, такие как

  • собственный API Java
    • GraphDatabaseService.schema().getConstraints() и .getIndexes() для схемы меток
    • GraphDatabaseService.index().nodeIndexNames() и .relationshipIndexNames() для унаследованных индексов
  • REST вызывает конечные точки
    • /db/data/schema/ для схемы на основе меток
    • и /db/data/index/node/ и /db/data/index/relationship/ для унаследованных индексы

9
задан Meroon 27 May 2009 в 23:16
поделиться

3 ответа

Если это объект, вы используете нотацию указателя. Все типы c (int, BOOL, long и т. Д.) Не являются объектами, поэтому вы используете указатель только в том случае, если вам нужен указатель на их место в памяти:

NSObject *obj;
UIView<Protocol> *obj;
int integerVar;
BOOL isTrue;

Особый случай - id , который сам по себе является указателем на объект, поэтому вам не нужен * :

id obj;

Немного сложно:

NSInteger int;
NSNumber *number;

NSInteger - это соответствующий тип int для платформы, тогда как NSNumber - это объект, который может содержать int, float или что у вас есть.

20
ответ дан 4 December 2019 в 08:16
поделиться

Каждый класс Objective-C, такой как NSString, NSObject, NSView и т. Д., Должен быть указателем, за исключением нескольких специальных типов, таких как NSUInteger, который, как мне кажется, является просто определением типа для int.

NSString *stringyString = @"THIS STRING IS STRINGY!!!11";
NSOpenPanel *openPanel;
NSObject *objectyObject;
NSUInteger integeryInteger = 7;

Единственное, чего не будет - это id, потому что это указатель на любой объект.

id pointerThatCanBeSetToAnyObject = [NSString stringWithString:@"HEYYYY"];

Только типы переменных C, такие как int, float, BOOL и т. Д., Не требуют указателя, за исключением строк C, таких как char массивы.

int SEVEN = 7;
float SIXPOINTTWO = 6.2;
char *characterArray = "HEYYYYY";

Наконец, классы CoreFoundation имеют своего рода гибрид; многие классы будут указателями, но для некоторых классов, таких как CFString, CFStringRef уже будет указателем. Многие функции CFString возвращаются как CFStringRef. CFString * и CFStringRef взаимозаменяемы с NSString * (это называется бесплатным мостом), хотя компилятор, вероятно, оценит это, если вы сначала примените его.

CFString *veryStringyString = @"STRINGYNESS!!11!one";
CFStringRef especiallyStringyString = @"STRRRRRRINNNNNGGGGYYYYY";
NSString *STRINGYNESS = (NSString *)veryStringyString;
1
ответ дан 4 December 2019 в 08:16
поделиться

Указатели используются для хранения адреса выделенной памяти. Когда вы создаете объект в какао, вы выделяете память и сохраняете адрес в указателе.

BOOL, char, int сохраняют значение.

Когда вы создаете класс, он выделяет память, поэтому вам нужно сохранить указатель на эту память чтобы получить к нему доступ:

NSMutableArray * arr = [[NSMutableArray alloc] init];

Как типы C очищаются из памяти?

«Простые» типы размещаются в стеке. Когда вызывается метод, в стеке выделяется пространство для хранения всех переменных метода (плюс некоторые другие вещи, такие как параметры, адрес возврата и т. Д.). Так что стек растет. Как только метод возвращает, стек сжимается, и пространство, которое использовалось методом, теперь освобождается - так что да, простые типы будут «очищены».

На самом деле это намного проще, чем кажется. Загляните в статью о стеке в википедии - раздел Аппаратные стеки для получения дополнительных сведений, чтобы удовлетворить ваше любопытство.

Когда вы «выделяете память», эта память выделяется в куче. Куча существует для всего выполнения вашего приложения. Как только вы выделяете память в куче, вы получаете адрес этой памяти - вы сохраняете этот адрес в указателях. Указатель - это просто переменная, которая хранит адрес памяти.

Когда ваш метод возвращает, у вас больше нет доступа к вашим «простым» переменным, объявленным внутри метода (например, BOOL, int, char и т. Д.), Но память в куче все еще там . Если у вас все еще есть адрес памяти (например, указатель), вы можете получить к ней доступ.

А как насчет переменных экземпляра «простого» типа (редактировать: внутри объекта?)?

Когда вы создаете объект (мы говоря об объекте C и какао здесь) и выделяя его, вы выделяете пространство для всего объекта. Размер объекта - это размер всего этого » s (не уверен, что obj-c добавляет что-то еще). Таким образом, переменные экземпляра являются частью вашей объектной памяти в куче. Когда вы освобождаете / удаляете объект, его память освобождается, и у вас больше нет доступа к переменным, которые хранятся внутри объекта (в obj-c вы вызываете release, каждый объект сохраняет счетчик ссылок, когда счетчик ссылок достигает 0, объект освобождается - освобождается память в куче).

5
ответ дан 4 December 2019 в 08:16
поделиться