неділю, 13 березня 2016 р.

Objective-C questions and answers for interview

Без каких нибудь прелюдий, начнем...


Ресурси с вопросами:
https://habrahabr.ru/post/273487/

+ некоторые свои :)

>> Методы +(void) и  -(void)

General:
+ (void) - метод который вызывается на классе. НП: [NSString alloc]
- (void) - метод который вызывается на объекте. НП: [NSString init]

Links:
http://stackoverflow.com/questions/3215979/void-or-void-difference

>>что такое void *?

General:
"void *" - ссылка на некоторый кусок памяти с не типизированным / неизвестным содержимым

More:
  • "id" - ссылка на некоторый случайный Objective-C объект неизвестного класса
  • "id<NSObject>" - ссилка на обект неопределенного типа, но он поддерживает методи @protocol NSObject, тоисть на етом обекте можно будет визвать "- (BOOL)respondsToSelector:(SEL)aSelector;" но не метод "- (id)copy;"
  • При попытке вызова метода на "void *" компилятора будет показывать варнинг
  • На "id" объекте можно вызвать любую функцию с @interface
Links:

Examples:
int year = 1967;
void *genericPointer = &year;
int *intPointer = (int *)genericPointer;
NSLog(@"%d", *intPointer);

>>а что означает просто void?

General:
void - обозначает что функция ничего не возвращает.

Links:
http://stackoverflow.com/questions/1966959/what-does-void-mean-in-this-function-declaration-voidawakefromnib

>>что такое id?

General:
"id" - ссылка на некоторый случайный Objective-C объект неизвестного класса

>>в чем разница между void * и id?

General:
Смотреть выше.

>>как определен id?

Так как id ето любой класс objtctive-c значит он имеет isa, соответственно на основе isa ми можем узнать такую информацию:

struct objc_class {
        Class isa;
    
    #if !__OBJC2__
        Class super_class                                        OBJC2_UNAVAILABLE;
        const char *name                                         OBJC2_UNAVAILABLE;
        long version                                             OBJC2_UNAVAILABLE;
        long info                                                OBJC2_UNAVAILABLE;
        long instance_size                                       OBJC2_UNAVAILABLE;
        struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
        struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
        struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
        struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
    #endif
    
    } OBJC2_UNAVAILABLE;

Links:
https://habrahabr.ru/post/148922/

>>можно ли создать структуру и привести к id?




Немає коментарів:

Дописати коментар