在Objective-C中,NSObject是所有類的基類,所有類都繼承自它,我們可以通過繼承NSObject為一個類添加自定義屬性;
NSObject
1.除了通過點文法,還可以通過valueForKeyPath擷取對象的某個屬性值
Person *person; //
NSString *name = [person valueForKeyPath:@"name"];
2.對于NSArray,我們也可以使用valueForKeyPath:但是因為array本身沒有name屬性,是以該方法會把數組中每個元素對象的name屬性值添加到一個新的NSArray數組中傳回;
NSArray *arr; //
NSArray *names = [arr valueForKeyPath:@"name"];
3.字典對象和NSObject對象互轉
4.通過KVC設定某個屬性的值
[obj setValue:(id) forKeyPath:(NSString *)];
UIImage
加載圖檔有兩種方式:
該方式加載圖檔,加載好的圖檔會一直存放在記憶體中,不會釋放,下次如果再使用同樣的圖檔的時候不會重新加載,而是會直接用記憶體中的資料;需要注意的是,即使沒有強指針類型的指針引用,圖檔也不會被銷毀;
此方式不會使用緩存,隻要沒有強類型指針引用該image對象就會被銷毀;
圖檔平鋪:
[image stretchableImageWithLeftCapWidth:(NSInteger) topCapHeight:(NSInteger)];
[image resizableImageWithCapInsets:];
[image resizableImageWithCapInsets:(UIEdgeInsets) resizingMode:UIImageResizingModeStretch];
圖檔剪切:
// 根據rect切割image的一個區域生成新的image;CGImage中的rect的機關是像素,而UIKit中的機關是螢幕實體尺寸;
CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, rect);
// 轉換 CGImageRef為UIImage;
UIImage *newImage = [UIImage imageWithCGImage:imageRef];
UIDevice
通過通知可以監聽裝置旋轉,電池電量改變,貼近臉部等;
UIDevice類提供了一個單例對象,可以通過它擷取一些裝置想關的資訊;比如電池電量值(batteryLevel),電池狀态(batteryState),裝置類型(model,比如iPod、iPhone),系統資訊(systemVersion);
[UIDevice currentDevice]; // 擷取此單例對象;
[UIDevice currentDevice].systemVersion; // 判斷目前運作的作業系統版本
UIDevice會不間斷的發一些通知
UIDeviceOrientationDidChangeNotification // 裝置旋轉
UIDeviceBatteryStateDidChangeNotification // 電池狀态改變
UIDeviceBatteryLevelDidChangeNotification // 電池電量改變
UIDeviceProximityStateDidChangeNotification // 近距離傳感器(貼近臉部)
UIStoryboardSegue
UIStoryboardSegue分為兩種,分别是自動執行的Segue和手動執行的Segue;
identifier; // 唯一辨別
sourceViewController; // 來源控制器
destinationViewController; // 目标控制器
手動執行sugue流程:
1.[self performSegueWithIdentifier:@”login” sender:nil]; // Segue必須由源控制器執行,該perform方法需由控制器調用;self就是源控制器調用者,此方法做了三件事:
根據identifier去storyboard中找到對應的segue線,建立UIStoryboardSegue對象;
設定segue對象的sourceViewController為self;
建立并且設定segue的目标控制器;
2.controller自動調用sourceViewController的下面這個方法
sender就是performSegueWithIdentifier中傳入的sender;
手動調用segue和自動類型segue,在跳轉之前都會執行該方法;
3.調用segue對象的-(void)perform方法開始執行界面跳轉
擷取sourceViewController所在的UINavigationController;
調用UINavigationController的push方法将destinationViewController壓入棧中,完成跳轉;