検索

ホームページ  >  に質問  >  本文

关于objective-c类方法与实例方法的一些疑问

之前都是在搞前端js
之后写ios开始慢慢接触objective-c
有个疑问

//实例方法调用
NSString *str1 = [[NSString alloc] initWithString:@"123123"];

//类方法调用
NSString *str2 = [NSString stringWithString@"123123"];

我的疑问可能用上面例子会不太能凸显出来
疑问在于,
实例方法必须创建一个实例后使用实例进行调用
也就是内存中必存在一个实例
如果我想不通过实例来达到某些操作
那在设计API时可以设计成类方法,这样就可以直接通过类名进行调用
但是这种情况难道就不会生成实例在内存中了吗??
或者说,虽然没有生成实例,但内存依然会分配空间
那如果

[XXXClass abc];
[XXXClass bcd];
[XXXClass cde];
[XXXClass def];

这种情况下,内存会分配多少块内存空间呢?
而但代码域(如方法内)结束后,内存空间又是否能正常释放呢?

巴扎黑巴扎黑2859日前510

全員に返信(2)返信します

  • 阿神

    阿神2017-04-24 09:15:06

    あなたが挙げた例では、オブジェクト メソッドであってもクラス メソッドであっても、その目的はオブジェクト インスタンスを取得することです。
    最初にメモリ領域を割り当てずにオブジェクトを構成するにはどうすればよいですか?
    おそらくクラスメソッドは次のように実装されます:

    リーリー

    返事
    0
  • PHPz

    PHPz2017-04-24 09:15:06

    Ctrl キーを押しながら NSString をクリックして確認してください。

    リーリー

    これら 2 つのメソッドの前に注目してください。1 つは「-」、もう 1 つは「+」です
    oc では、プラス記号を付けてメソッドを宣言すると、インスタンス化せずにこのクラスのメソッドを呼び出すことができます。
    マイナス記号を使用してメソッドを宣言する場合は、このクラスでメソッドを呼び出す前に、まずオブジェクトを割り当てる必要があります。

    返事
    0
  • キャンセル返事