Sunday, October 31, 2010
[iOS] About 'autorelease'
Obj-C 로 개발하다가, 최초에 가장 헷갈렸던 개념중에 하나 인데,
autorelease라는 keyword탓이기도 하고, 지금 생각해보면, Apple탓이기도 한데,
"GC 가 알아서 해결해줄것임" 이라고 오해하기가 쉬운것 같다.
쉽게 얘기하면, autorelease를 특정 object에 걸어주면, release하는 시점을 연기한다고 이해 하면 된다.
그럼, 연기된 'release'가 언제 수행되는가 ?
그것을 알려면 NSAutoReleasePool 이라는 녀석을 알아야 한다.
object에 autorelease를 걸면,
current NSAutoReleasePool에 쌓이게 되고, NSAutoReleasePool이 Release될때, 함께 릴리즈 된다.
NSAutoReleasePool 은 Objective-C runtime에 의해 관리 되는데,
NSAutoReleasePool Object를 생성하게 되면, Stack처럼 쌓이게 되고,
top 에 있는 object가 current NSAutoReleasePool이 된다.
그래서 autorelease 를 많이 사용하는 application을 개발하면,
이 NSAutoReleasePool 관리에도 신경을 써서 개발해야만 한다.
Saturday, October 30, 2010
[iOS] display multiple lines with UILabel
UIKIT_EXTERN_CLASS @interface UILabel : UIView
{
....
}
@property(nonatomic) UILineBreakMode lineBreakMode; // default is UILineBreakModeTailTruncation. used for single and multiple lines of text
// this determines the number of lines to draw and what to do when sizeToFit is called. default value is 1 (single line). A value of 0 means no limit
// if the height of the text reaches the # of lines or the height of the view is less than the # of lines allowed, the text will be
// truncated using the line break mode.
@property(nonatomic) NSInteger numberOfLines;
You can set numberOfLines to display on UILabel set numberOfLines attribute.
[label setLineBreakMode:UILineBreakModeTailTruncation];
[label setNumberOfLines:2];
this code will display 2 line of text and if it overflow tail will be changed as "...."
Wednesday, October 27, 2010
Fitnesses + Spring
@Autowired된 Object를 Inject 하였다.
현재 상태로 목적은 달성하였지만, Fixture마다 다 호출 해주어야하기때문에 영 맘에 들지 않는다.
Library를 수정하지 않고, 어떤 깔끔한 방법이 없을까?
Sporing 이라는 Library에서 Static Method 기반으로 호출하여 해결하려는 걸 본적 있는데,
이것도 영 맘에 안든다.
Spring-Fitnesses Project라는곳에서는 SpringRowFixture등을 재정의해서 활용 하는것 같은데,
이것도 글쎄,, 해당 Class마다 FixtureLibrary Class를 상속받고 Spring에 필요한것들을 중복하여 써주는 형식이거나 Static Method를 호출하는 형식일텐데..
이것도 맘에 들지 않는다.
시간이 나면 Library를 수정해서, Junit4의 @Runwith 같은 형식으로 해결할수 있게 해볼까 한다.