Метод возвращает мой объект objective c

#objective-c

#objective-c

Вопрос:

У меня есть класс с именем MyClass, который содержит 3 NSInteger, и я не могу выполнить подобный метод:

 - (myClass)getClass {
    myClass *class1;
    return class1
}
 

это выдает мне ошибку

РЕДАКТИРОВАТЬ: ошибка находится в .h

 - (myClass *)getClass; Error: expected ')' before 'myClass'
 

Комментарии:

1. @Inerdia вероятно, «Тип интерфейса ‘MyClass’ не может быть возвращен по значению».

2. Нет, «ожидается ‘)’ перед MyClass»

3. Большое вам спасибо, я бил себя по голове с той же ошибкой! 🙂

Ответ №1:

Я полагаю, вы хотите вернуть экземпляр myClass . Вы можете сделать это следующим образом:

 - (myClass *)getClass {
  myClass *class1 = [[[myClass alloc] init] autorelease];
  return class1;
}
 

Если вместо этого вы хотите вернуть сам класс:

 - (Class)getClass {
  return myClass;
}
 

Вы можете изменить значение - на a , если хотите, чтобы это был метод класса, а не метод экземпляра. Ваш вопрос был не совсем ясен.


В Objective-C вы никогда не сможете вернуть объект по значению, поскольку размер объекта в Objective-C неизвестен во время компиляции. Если вам не нравятся звездочки везде, вы можете сделать typedef myClass* myClassRef и вернуть a myClassRef вместо этого.

Комментарии:

1. Спасибо, но ошибка в . его нет в .m. У меня также были ошибки в .m, но я написал ваш первый код и исправил их.

Ответ №2:

В Objective-C каждый тип класса является ссылочным типом. Итак, возвращаемый тип должен быть myClass* . Когда у нас есть указатель, подобный —

 int *ptr = new int; // The type of ptr is int* but not int. Same is the case for 
                        // class types too.
 

Комментарии:

1. Да, я должен написать — , но я собираюсь попробовать с *

2. @user1019831 — хм.. вы изменили вопрос.

3. Это C , а не Objective-C.

4. @WTP — я почти уверен, что эта строка также компилируется на Objective-C. Пожалуйста, проверьте это. Хотя я могу ошибаться 🙂

5. @Mahesh это не так. Это происходит только в том случае, если вы компилируете как C или Objective-C . В Objective-C вам нужно сделать int *ptr = malloc(sizeof(int)); .

Ответ №3:

Завершив ответ Махеша, вам нужно сделать:

 - (myClass*) getClass { 
   myClass *class1; 
   return class1; 
}
 

или, если метод статический, вам нужно сделать:

   (myClass*) getClass { 
   myClass *class1; 
   return class1; 
}