在不允許修改參數(shù)變量的值時可以加上const修飾符
- (void)test:(NSString * const)name{
}
圖片
在ios中會自動識別圖片@幾x來按比例顯示
假如圖片是xxx@2x.png那么它[UIImage imageNamed:"xxx"]生成的圖片默認寬高是圖片物理像素的一半。@3x即是1/3倍, 至于會加載@2x還是@3x會根據(jù)當前設備的dpr來加載终惑。
imageWithRenderingMode
該屬性可以使圖片渲染使放棄自身著色 使用當前控件的tintcolor的顏色
//使用圖片自身顏色
[[UIImage imageNamed:[NSString stringWithFormat:@"%@_selected.png",vcName]]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
//使用tintcolor
[[UIImage imageNamed:[NSString stringWithFormat:@"%@_selected.png",vcName]]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
使用xib文件布局uiview
//1.利用NSBundle加載 (缺點 只能作為uiview加載出來)
testView* test = [[[NSBundle mainBundle] loadNibNamed:@"testView" owner:self options:nil] lastObject];
//2.利用UINib加載(優(yōu)點 可以作為uinib對象加載出來 方便給uitablecontroller注冊)
testView* test = [[[UINib nibWithNibName:@"testView" bundle:[NSBundle mainBundle]] instantiateWithOwner:self options:nil] lastObject];
控制器view底層實現(xiàn)
//如果.m文件中沒有_view的成員變量則需要寫同步
@synthesize view = _view;
//view的getter方法
- (UIView *)view{
if (_view == nil) {
[self loadView];
//didload是在loadvie方法之后調用的
[self viewDidLoad];
//所以在其他地方調$control.view.xxx=xxx;的時候會覆蓋掉viewdidload里設置的樣式
}
return _view;
}
-(void)loadView{
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
}
如果一個控制器需要顯示察净,則該控制器一定要被強引用不能被銷毀
- (void)xxx{
UIViewController *A= UIViewController 創(chuàng)建
[keyWindow addSubview:A.view] //A的view被keyWindow的subview數(shù)組強引用
}
但是A沒有被強引用
當執(zhí)行A.view上控件的事件去調用A對象中的方法時會報錯歌憨,因為執(zhí)行完xxx方法時A對象被銷毀了
#####正確方式
@property (strong,nonatomic) VJAViewController* Ac;
UIWindow* window = [UIApplication sharedApplication].keyWindow;
VJAViewController* A = [[VJAViewController alloc] init];
//注意需要把控制器的指針強引用 不能自動釋放
//這樣當A.view里的控件觸發(fā)事件時才能調用A對象里的方法。
_Ac = A;
[window addSubview:A.view]