您的位置:首页 > 移动开发 > Objective-C

iOS NSObject

2016-03-16 09:21 323 查看
在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对象互转

[obj setValuesFoKeysWithDictionary:dict];  // (KVC)将一个字典里面的key和value赋值给对象对应的属性;


[obj dictionaryWithValuesForKeys:@[@“name”, @“age”]];  // 将obj的name和age属性转换为一个字典;


4.通过KVC设置某个属性的值

[obj setValue:(id) forKeyPath:(NSString *)];


UIImage

加载图片有两种方式:

[UIImage imageNamed:]; // 初始化


该方式加载图片,加载好的图片会一直存放在内存中,不会释放,下次如果再使用同样的图片的时候不会重新加载,而是会直接用内存中的数据;需要注意的是,即使没有强指针类型的指针引用,图片也不会被销毁;

[UIImage imageWithContentsOfFile:];


此方式不会使用缓存,只要没有强类型指针引用该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的下面这个方法

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;


sender就是performSegueWithIdentifier中传入的sender;

手动调用segue和自动类型segue,在跳转之前都会执行该方法;

3.调用segue对象的-(void)perform方法开始执行界面跳转

获取sourceViewController所在的UINavigationController;

调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios