之前都是在搞前端js
之後寫ios開始慢慢接觸objective-c
有個疑問
//实例方法调用
NSString *str1 = [[NSString alloc] initWithString:@"123123"];
//类方法调用
NSString *str2 = [NSString stringWithString@"123123"];
我的疑問可能用上面例子會不太能凸顯出來
疑問在於,
實例方法必須建立一個實例後使用實例進行呼叫
也就是記憶體中必存在一個實例
如果我想不透過實例來達到某些操作
那在設計API時可以設計成類別方法,這樣就可以直接透過類別名稱來呼叫
但是這種情況就不會產生實例在記憶體中了嗎??
或者說,雖然沒有產生實例,但記憶體依然會分配空間
那如果
[XXXClass abc];
[XXXClass bcd];
[XXXClass cde];
[XXXClass def];
這種情況下,記憶體會分配多少塊記憶體空間呢?
而但程式碼域(如方法內)結束後,記憶體空間又是否能正常釋放呢?
你给的例子中,不管是对象方法还是类方法,它们的目的都是要得到一个对象实例。
不首先分配内存空间,拿什么去配置你的对象呢。
说不定类方法里面是这么实现的:
按住ctrl点NSString进去看。
看这两个方法的前面,一个是“-”一个是“+”
在oc里面,如果用加号申明一个方法的话,是不需要实例化就可以调用这个类的方法。
如果用减号申明一个方法,那么需要先alloc实例化一个对象才能对这个类里的方法进行调用。