iOS에서 [Class new]와 [[Class alloc] init]의 차이점은 무엇입니까?
중복 가능성 :
Objective-C의 alloc, init 및 new
[Class new]
및 에 대해 약간 혼란 스럽습니다 [[Class alloc] init]
. 및을 content
사용하여 개체 를 정의했습니다 .[Class new]
[[Class alloc] init]
(1). NSMutableArray *content = [NSMutableArray new];
(2). NSMutableArray *content = [[NSMutableArray alloc] init];
내 질문은 [Class new]
과 의 차이점에 관한 것 [[Class alloc] init]
입니다. 저에게는 (1)과 (2)가 비슷합니다. (1)과 (2)가 비슷하다면 왜 우리는 [[Class alloc] init]
대부분의 시간을 사용 [Class new]
합니까? 약간의 차이가 있다고 생각합니다.
두 가지의 차이점, 장단점을 친절하게 설명 하시겠습니까?
Alloc : NSObject의 클래스 메소드. 수신 클래스의 새 인스턴스를 반환합니다.
Init : NSObject의 인스턴스 메소드. 메모리가 할당 된 직후에 새 객체 (수신자)를 초기화하기 위해 서브 클래스에 의해 구현됩니다.
신규 : NSObject의 클래스 메소드. 수신 클래스의 새 인스턴스를 할당하고 초기화 메시지를 보내고 초기화 된 객체를 반환합니다.
Release : NSObject 델리게이트의 인스턴스 메소드. 수신자의 참조 횟수를 줄입니다.
Autorelease : NSObject 델리게이트의 인스턴스 메소드입니다. 현재 자동 해제 풀에 수신자를 추가합니다.
Retain : NSObject 델리게이트의 인스턴스 메소드. 수신자의 참조 횟수를 증가시킵니다.
복사 : NSObject 델리게이트의 인스턴스 메소드. 수신자의 복사 본인 새 인스턴스를 반환합니다.
결론적으로 우리는
alloc은 init와 함께 간다
신규 = 할당 + 초기화
이 +new
메서드는 +alloc
및의 약어입니다 -init
. 소유권 의미는 동일합니다. 사용의 유일한 이점 +new
은 더 간결하다는 것입니다. 클래스의 이니셜 라이저에 인수를 제공해야하는 경우 대신 +alloc
및 -initWith...
메서드 를 사용해야합니다 .
여기 : Objective-C의 alloc, init 및 new
기본적으로 현대 대 전통의 문제입니다. new에 비해 init의 가장 직접적인 장점은 많은 사용자 정의 init 메서드가 있다는 것입니다.
'programing tip' 카테고리의 다른 글
ARM에서 SP (스택) 및 LR이란 무엇입니까? (0) | 2020.11.08 |
---|---|
XML 및 Java 코드를 통해 OnClickListener 인터페이스를 사용하는 것은 어떻게 다릅니 까? (0) | 2020.11.07 |
Visual Studio를 처음 시작하는 데 시간이 오래 걸립니다. (0) | 2020.11.07 |
동일한 순서로 한 번에 두 목록을 섞습니다. (0) | 2020.11.07 |
* nix에서 로그인 할 때 스크립트를 어떻게 실행합니까? (0) | 2020.11.07 |