iOS开发技术分享iOS

做题系列之4---今天不做题

2016-04-01  本文已影响50人  08878f627e79

今天的主题是:

一、 什么是指针数组、什么是数组指针、什么二级指针?

举个具体栗子:

那二级指针是什么捏。如下:

char *argv[3]={{"abcdefg"},{"1234567"},{"q1w2e3r"}};  
char **p = argv;  //二级指针

printf("*p=%s/n",*p);            //*p=abcdefg
printf("*(p+1)=%s/n",*(p+1));    //*(p+1)=1234567
printf("*(p+2)=%s/n",*(p+2));    //*(p+2)=q1w2e3r

由上可见,可以简单的把二级指针理解为指针数组。

二、 怎么证明meta class中保存的是类方法?

在objc-runtime-new.mm中有_read_images这个方法,我们来看一下(截取关键代码)

for (EACH_HEADER) {
        category_t **catlist = 
            _getObjc2CategoryList(hi, &count);
        for (i = 0; i < count; i++) {
            category_t *cat = catlist[i];
            Class cls = remapClass(cat->cls);

            bool classExists = NO;
            if (cat->instanceMethods ||  cat->protocols  
                ||  cat->instanceProperties) 
            {
                addUnattachedCategoryForClass(cat, cls, hi);
                if (cls->isRealized()) {
                    remethodizeClass(cls);
                    classExists = YES;
                }
            }

            if (cat->classMethods  ||  cat->protocols) 
            {
                addUnattachedCategoryForClass(cat, cls->ISA(), hi);
                if (cls->ISA()->isRealized()) {
                    remethodizeClass(cls->ISA());
                }
            }
        }
    }

这是加载category的代码,我们看到他区分了instanceMethods和classMethods。并且将classMethods加入了cls->ISA(),也就是meta class。

上一篇 下一篇

猜你喜欢

热点阅读