2011-02-01 4 views
1
UILabel *testLbl = [[self alloc] init]; 

입니다 :이 작업이 가능합니까? 혼란이 시작된 곳

그것은 클래스 방법 내에서 인스턴스를 참조 할 자기보다 변수 기타를 사용하는 것이 좋습니다 :

+ (id)rectangleOfColor:(NSColor *)color { 
id newInstance = [[Rectangle alloc] init]; // GOOD [newInstance setColor:color]; return [newInstance autorelease]; 
} 

사실, 오히려 보내는 것보다 클래스 메쏘드에서 클래스에 대한 alloc 메시지는 alloc을 자기에게 보내는 것이 더 좋다. 이렇게하면 클래스가 서브 클래 싱되고 rectangleOfColor : 메시지가 서브 클래스에 의해 수신되면 리턴 된 인스턴스는 서브 클래스와 동일한 유형이됩니다 (예 : NSArray의 배열 메소드는 NSMutableArray에 의해 상속 됨).

+ (id)rectangleOfColor:(NSColor *)color { 
id newInstance = [[self alloc] init]; // EXCELLENT [newInstance setColor:color]; return [newInstance autorelease]; 
} 
+0

더 나은 태그를 선택하십시오! – peoro

+0

'직장'이란 무엇입니까? – taskinoor

+0

은 둘 사이에 어떤 차이가 있음을 의미합니다. UILabel * testLbl = [[self alloc] init]; UILabel * testLbl = [[UILabel alloc] init]; – Prabh

답변

1

아니요, 작동하지 않습니다. 첫 번째 줄에서는 메시지를 클래스의 인스턴스로 보냈습니다. Apple의 설명서에서 복사 한 예에서 alloc 메시지는 클래스Rectangle으로 전송됩니다. 차이점은 라인이 (분명히) 인스턴스 메소드 내에 있다는 것입니다. Apple의 예제는 클래스 메소드 안에 있습니다. There is a difference.

@Denis가 언급 한 것처럼 [[[self class] alloc] init]을 사용하여 수행하려는 작업을 수행 할 수 있지만 실제로는 수행하지 마십시오. 이 기능이 제공하는 융통성이 거의 필요하지 않으며 새로운 객체의 의도를 진부화시킬뿐입니다.

2

아니요, "UILable undeclared (이 기능에서 처음 사용)"오류가 발생합니다.

관련 문제