天天看點

iOS NSObject

在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壓入棧中,完成跳轉;

iOS