찾다

 >  Q&A  >  본문

关于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];

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

巴扎黑巴扎黑2766일 전460

모든 응답(2)나는 대답할 것이다

  • 阿神

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

    당신이 제시한 예에서 객체 메소드이든 클래스 메소드이든 그 목적은 객체 인스턴스를 얻는 것입니다.
    메모리 공간을 먼저 할당하지 않고 어떻게 개체를 구성할 수 있나요?
    아마도 이것이 클래스 메소드에서 구현되는 방식일 것입니다:

    으아아아

    회신하다
    0
  • PHPz

    PHPz2017-04-24 09:15:06

    Ctrl을 누른 채 NSString을 클릭하여 살펴보세요.

    으아악

    이 두 가지 방법의 앞부분을 보면 하나는 "-"이고 다른 하나는 "+"입니다
    oc에서는 더하기 기호를 사용하여 메서드를 선언하면 인스턴스화 없이 이 클래스의 메서드를 호출할 수 있습니다.
    빼기 기호를 사용하여 메서드를 선언하는 경우 이 클래스에서 메서드를 호출하기 전에 먼저 개체를 할당해야 합니다.

    회신하다
    0
  • 취소회신하다