티스토리 뷰


Objective C 코드를 보다보니 말도안되는 Syntax가 많이 보인다.


그중 제일 이해안되는 [] 대괄호에 대해 고수분들께 문의했고

오늘 배운것을 정리해본다.


일단 예제소스를 써보자

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(23,28,258,20) ];



이게 문제의 출발이다

이 말도안되는 소스는 대체 무엇인가

일단 여기서 왼쪽절은 titleLabel이라는 UILabel 포인터 변수를 선언한거다. 여기까지는 소양



우측 UILabel alloc 은 내가 알고있는 객체지향 개념으로는 new라고 보면 된다고 하셨다.

메모리를 할당해야 그 포인터 주소가 나오니까 그걸 alloc (메모리할당) 한거다.


그럼 그렇게 나온 놈한테 initWithFrame을 한거로 봐야한다.


나눠보면

UILabel *titleLabel = [UILabel alloc];

[titleLabel initWithFrame:CGRectMake(23,28,258,20)];


이렇게 나뉘어진다.


그래 위에문장은 그렇다고 치자 뭐 완벽하게 이해되는건 아니지만


그럼 아래문장에 대괄호는 왜친건데?


라고 질문이 출발하니


그에대한 답은 '메시지'의 개념을 이해해야 한다고 하셨다. 그리고 [] 대괄호로 묶는건 인자? 라고 봐야된다고도 하셨다.


titleLabel이라는 놈한테 initWithFrame[] 을 한거다

내가 아는 문법으로 바꾸면

titleLabel.initWithFrame()


이렇게 바꿀수 있다는거다.


CGRectMake()를 해서 나온 사각형을 initWithFrame에 보내고 그걸 할당한 UILabel 포인터변수에 넣은거다.


음.. 정리를 해도 말로 표현이 잘 안되는데 이 그지같은 형태의 근원은


우리가 갖고있는 일반적인 개념으로는 각 객체의 함수를 실행시킨다. 라는 생각을 갖고있는데


C에서는 우린 그 일을 수행할 놈한테 메시지를 보내고, 그 처리는 그쪽에서 알아서 하게 한다... 메시지를 보낸다는 부분이 포인트다.


이게 큰 차이점이라고 한다.


자 결론

[] 대괄호는 파라미터를 보내는거 정도로 기억해라 like ()




그럼 적용을해보자


[self addSubView:mMyVariable];


이놈을 해석하면

self.addSubView(mMyVariable); 


이렇게 되는거다




번외편


- (id)initWithFrame:(CGRect)frame withInfo:(Weather *)info

{

//BlahBlah

return self

}



뭐 이런 함수


젤 위에보면 -가 붙는데

-는 보통 함수같은데 쓰고 가끔보이는 +는 static 함수 같은데 쓰인다고 한다.

대충 난 -만 쓰면 될거같다.


(id)를 리턴하는 initWithFrame함수인데 인자로 CGRect타입의 frame과 withInfo라는이름의 Weather 포인터 info를 받는다.


뭐 이정도로 봐야될거같다.


[]를 할때 변수가 하나만있으면 땡땡이: 콜론 을 생략하는 이상한 요상한 법칙이 있다고 한다.


일단 오늘은 여기까지 정리하고 넘어간다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함