我們首先看看關於類別的結構體:
從上面結構體中我們可以看到這幾個屬性:
category_name:類別的名字。
class_name:類別的類。
instance_methods:類別中的例項方法(-)。
class_methods:類別中的類方法(+)。
protocols:類別中的協議。
那麼類別怎麼往原始類中新增方法呢?
1.首先他將類別中的類方法新增到class的mehod class中。
2.然後將類別中的例項方法以倒序的方式新增到類別中的例項方法中,如果原本類中有方法a,b,新家的類別中有方法c,d。那麼方法列表中儲存方法的順序為c,d,a,b。
3.當類別新增完畢後,回銷毀原始的類別。
我們再來看看成員變數和屬性的結構體。
先看成員變數:
當我們往某個類父類中新增屬性時,編譯器會更改我們上述的布局。這時子類的布局就會出錯。
這時應該怎麼辦呢?
其實偏移位址是通過基類位址+物件位址+ivar偏移位址來算出實際的位址。
那麼屬性是怎麼回事,屬性其實就是將屬性轉化為上述的成員變數,然後編譯器自動合成setter和getter方法。
const 成員變數
class mytestclass public const int m ciint const string m csstr static int m siint static string m ssstr const static int m csiint const static string...
BigDecimal成員變數
round half up 遇到.5的情況時往上近似,例 1.5 2 round half down 遇到.5的情況時往下近似,例 1.5 1 bigdecimal a new bigdecimal 1.5 system.out.println down a.setscale 0,bigdecima...
靜態成員變數
在上一課中的靜態成員變數,你了解到的類可以有成員變數是在類的所有物件共享。然而,如果我們的 靜態成員變數是 私人的?考慮下面的例子 1 2 3 4 5 6 7 8 9 10 11 12 13 classsomething intsomething s nvalue 1 initializer int...