2012/08/25
UIImageView - contentMode 讓UIImage保持原大小、並置中於UIImageView中
誠如上圖,在set image給UIImageView的時候會碰到它自己被拉伸到和View一樣的大小
於是iOS SDK就有簡單的code可以調用來處理這個情形
就是contentMode~(繼承UIView的sub classes應該都可以透過這個方法調整它的內容)
將contentMode設定成UIViewContentModeCenter就可以達成了,
它有許多模式,可以多try看他效果如何 :D
模式列表:
(來源:UIView Class Reference - UIContentMode)
調用方式:
2012/08/21
objectiv-C 中 retain/copy/assign的含義
原文:新手入門,請給講一下retain/copy/assign的含義,三樓回文
舉個例子
上面一段代碼會執行以下兩個動作
1. 分配一段記憶體空間用來存儲@"abc" 譬如:記憶體位址為:0X1111,內容為 "abc"
2. 分配一段記憶體空間用來存儲pt 譬如:記憶體位址為:0Xaaaa,內容自然為0X1111
接著分別比較assign、retain、copy
assign的情況:
retain的情況:
copy的情況:
舉個例子
NSString *pt = [[NSString alloc] initWithString:@"abc"];
上面一段代碼會執行以下兩個動作
1. 分配一段記憶體空間用來存儲@"abc" 譬如:記憶體位址為:0X1111,內容為 "abc"
2. 分配一段記憶體空間用來存儲pt 譬如:記憶體位址為:0Xaaaa,內容自然為0X1111
接著分別比較assign、retain、copy
assign的情況:
NSString *newPt = [pt assign];此時newPt和pt完全相同:地址都是0Xaaaa、內容為0X1111。即newPt只是pt的別名,對任何一個操作就等於對另一個操作。 因此retainCount不需要增加。
retain的情況:
NSString *newPt = [pt retain];此時newPt的地址不再為0Xaaaa,可能為0Xaabb,但是內容依然為0X1111。 因此newPt 和 pt 都可以管理"abc"所在的記憶體。因此 retainCount需要增加1。
copy的情況:
NSString *newPt = [pt copy];此時會在堆上重新開闢一段記憶體存放@"abc", 比如0X1122 內容為@"abc" ,同時會在記憶體上為newPt分配空間。譬如地址:0Xaacc 內容為0X1122 ,因此retainCount增加1,供newPt來管理0X1122這段記憶體位址。
訂閱:
文章 (Atom)