1:Xcode項目的目錄結構是怎么分組的
一級目錄按照模塊份
二級目錄按照模塊內的功能分:Model,view,controller,
工具類可以一個單獨的category目錄
2:真機調試步驟
1,mac生成cer文件:告訴那臺電腦進行真機調試
2:添加APP IDs,
3:添加Devices:添加真機設備
4:下載Privinsioning Profiles文件,下載雙擊即可
3:控制器聲明周期
1)啟動程序
willFinishLaunchingWithOptions
didFinishLaunchingWithOptions
applicationDidBecomeActive
2)按下home鍵
applicationWillResignActive
applicationDidEnterBackground
3)雙擊home鍵,再打開程序
applicationWillEnterForeground
applicationDidBecomeActive
4)當程序將要退出是被調用,通常是用來保存數據
applicationWillTerminate
4:
協議的定義格式:
@protocol 協議名 <父協議>
定義方法
@end
注:定義協議的關鍵字是@protocol,同時協議也是可以繼承父協議的
@required:這個表示這個方法是其他類必須實現的,也是默認的值
@optional:這個表示這個方法對于其他類實現是可選的
5:修飾類型
copy:NSString/NSMutableString\block 希望獲得源對象的副本而不改變源對象內容
strong: 一般對象,其他OC對象 希望獲得源對象的所有權時
weak:UI控件,代理
assign:基本數據類型,int ,float,枚舉,結構體 對基礎數據類型
6:ios程序中數據數據存儲
XML屬性列表(plist)歸檔
Preference(偏好設置)
NSKeyedArchiver歸檔(NSCoding)
SQLite3
Core Data
7:代理的作用
委托代理(degegate),目的是改變和傳遞控制鏈
顧名思義,把某個對象要做的事情委托給別的對象去做。那么別的對象就是這個對象的代理,代替它來打理要做的事。反映到程序中,首先要明確一個對象的委托方是哪個對象,委托所做的內容是什么。
委托機制是一種設計模式。
8:通知:
需要有一個通知中心:NSNotificationCenter 然后監聽。刪掉前必須移除監聽者。
代理:
設置代理對象,某一時間只能有一個委托連接到某一對象。
9:判斷一個類是否屬于某個類:isKindOfClass
10:UIViewController的生命周期及iOS程序執行順序
當一個視圖控制器被創建,并在屏幕上顯示的時候。 代碼的執行順序
1、 alloc 創建對象,分配空間
2、init (initWithNibName) 初始化對象,初始化數據
3、loadView 從nib載入視圖 ,通常這一步不需要去干涉。除非你沒有使用xib文件創建視圖
4、viewDidLoad 載入完成,可以進行自定義數據以及動態創建其他控件
5、viewWillAppear 視圖將出現在屏幕之前,馬上這個視圖就會被展現在屏幕上了
6、viewDidAppear 視圖已在屏幕上渲染完成
當一個視圖被移除屏幕并且銷毀的時候的執行順序,這個順序差不多和上面的相反
1、viewWillDisappear 視圖將被從屏幕上移除之前執行
2、viewDidDisappear 視圖已經被從屏幕上移除,用戶看不到這個視圖了
3、dealloc 視圖被銷毀,此處需要對你在init和viewDidLoad中創建的對象進行釋放
自定義cell:
1:xib:cell的布局相對固定
2:代碼:每個cell均不同
//設置tableview尾部顯示的控件(footerView的寬度永遠是tablev的寬度)
//footer只需要設置高度
self.tableView.tableFooterView = [UIButton buttonWithType:UIButtonTypeContactAdd];
如何封裝一個View
1:新建一個xib文件,描述view內部的結構
2:新建一個新的類,繼承自系統自帶的view,繼承自哪個類,取決于xib文件跟對象的class
3:新建的類名,最好個xib文件名一致
4:將xib中的控件和自定義的類連線
5:提供一個類方法,快速返回一個自定義的view。(屏蔽從xib加載的過程)
模型需要訪問控制器的內容時,要用到代理
誰主動監聽,誰是代理]
代理對象用weak
總結:
協議名稱:控件名稱+Delegate
代理方法:
thunderboit
thunder
ios中分割線是通過UIView做的,把其高度設為1,即可
//init:通過代碼創建,初始化一個對象的時候,才會調用
//當一個對象,從xib中創建,舒適化完畢的時候,就會調用一次
代碼自定義cell(cell高度不一致)
1:新建一個繼承自UitableviewCell的類
2:(重寫initWithStyle)在構造方法中,添加所有需要顯示的子控件,不需要設置數據和frame,子控件加入到contentView
注:1:cell內部有imageView ,子控件不能叫imageView
2:自定義控件,要加到conentView中
3:進行子控件的一次性初始化,比如:字體,固定的圖片
3:提供2個屬性,
1:數據模型:存放文字數據,圖片數據
2:frame模型:存放數據數據模型,所有子控件的frame,和cell的高度
4:cell應該擁有frame模型(不要直接擁有數據模型)
5:重新frame模型屬性的setter方法。在這個方法中設置子控件的顯示數據和frame
6:frame模型數據的初始化,在控制器類中采用懶加載的方式。每一個cell對應的frame模型數據只加載一次
注:可把一些不變的放到init方法中,節省內存
通過代碼,任何控件都可以添加其他子控件,但是storyboard和xib不能
import <UIKit/UIKit.h>
textView.titleLabel.numberOfLines = 0;//文本換行
//去掉表格之間的分割線
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
//tableview的cell不能選中
self.tableView.allowsSelection = NO;
//設置按鈕內邊距
textView.contentEdgeInsets = UIEdgeInsetsMake(20, 20, 20, 20);
//transform:平移,縮放,旋轉
某個控件出不來
1,檢查frame的尺寸和位置。
2,hidden屬性是否為yes
3,有沒有添加到父控件
4,alpha 是否為0
5,被其他控件遮擋住
6,參考父控件的前面5個情況
任何UI控件,調完init方法后,沒有寬高
- UIView的生命周期是什么樣的,執行順序是怎么樣的?
init —— loadView —— viewDidLoad —— viewWillAppear —— viewWillDisappear —— viewDidUnload —— dealloc.
- UIViewController在什么時候會加載UIView,換句話說,技術上在哪個時間點會執行loadView。
在view對象第一次被訪問的時候,會執行loadView。
- 寫出 UIButton 的正確繼承父類和順序。
-> UIButton - UIControl - UIView - UIResponder - NSObject
. 如何合并多個數據并去除重復元素?
->使用 NSSet(不會有重復元素) 或 NSDictionary(不會對重復key插值)
kvc與kvo