@tom555cat 個(gè)人覺得這個(gè)問題與Non Fragile ivars無關(guān)
在Objective-C提供的runtime函數(shù)中,確實(shí)有一個(gè)class_addIvar()函數(shù)用于給類添加成員變量,但是文檔中特別說明:
This function may only be called after objc_allocateClassPair and before objc_registerClassPair. Adding an instance variable to an existing class is not supported.
意思是說,這個(gè)函數(shù)只能在“構(gòu)建一個(gè)類的過程中”調(diào)用。一旦完成類定義,就不能再添加成員變量了。經(jīng)過編譯的類在程序啟動(dòng)后就被runtime加載,沒有機(jī)會(huì)調(diào)用addIvar。程序在運(yùn)行時(shí)動(dòng)態(tài)構(gòu)建的類需要在調(diào)用objc_registerClassPair之后才可以被使用,同樣沒有機(jī)會(huì)再添加成員變量。
當(dāng)別人問Category為什么不能添加屬性學(xué)習(xí)寫簡(jiǎn)書博客,每次寫簡(jiǎn)書都是對(duì)過往的回顧 前言 這段時(shí)間換工作,發(fā)現(xiàn)面試經(jīng)常會(huì)問到一個(gè)問題:分類中能不能定義實(shí)例變量,為什么?答案:不能。類的內(nèi)存布局在編譯時(shí)期就已經(jīng)確定了...