initWithFrame方法的理解

initWithFrame方法是什么?

initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸)。

什么时候用initWithFrame方法?

简单的说,我们用编程方式申明,创建UIView对象时,使用initWithFrame方法。
在此,我们必须搞清楚,两种方式来进行初始化UIView。

NSString 字符串处理

iphone NSString 字符串处理:截取字符串、匹配字符串、分隔字符串

1.截取字符串

NSString*string = @"sdfsfsfsAdfsdf";
string = [string substringToIndex:7];//截取掉下标7之后的字符串
NSLog(@"截取的值为:%@",string);
[string substringFromIndex:2];//截取掉下标2之前的字符串
NSLog(@"截取的值为:%@",string);

UISlide属性

1.minimumValue

当值可以改变时,滑块可以滑动到最小位置的值,默认为0.0

_slider.minimumValue = 10.0;

2.maximumValue

当值可以改变时,滑块可以滑动到最大位置的值,默认为1.0

_slider.maximumValue = 100.0;

利用 AFNetworking 监听网络状态

1.创建网络监听者管理者对象

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

2.设置监听

1)网络状态

//显然是枚举值
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
    AFNetworkReachabilityStatusUnknown          = -1,//未识别的网络
    AFNetworkReachabilityStatusNotReachable     = 0,//不可达的网络
    AFNetworkReachabilityStatusReachableViaWWAN = 1,//2G,3G,4G...
    AFNetworkReachabilityStatusReachableViaWiFi = 2,//wifi网络
    }

仿射变换(CGAffineTransform)使用小结

一、理论基础

在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射由一个线性变换(运用一次函数进行的变换)接上一个平移组成。

CGAffineTransform简单分析(http://xummer26.com/blog/CGAffineTransform-simple-analysis.html)

二、射变换的种类

1.自定义变换

_demoView.transform = CGAffineTransformIdentity;
[UIView animateWithDuration:1.5f animations:^{
    _demoView.transform = CGAffineTransformMake(1.0, 0, 0, 1.0, 20, 20);
}];

property在声明中可以指定的属性

assign, retain, strong, weak, unsafe_unretained, copy

这些都是一个property在声明中可以指定的属性,且都与内存管理有关。下面会从Non-ARC和ARC两种情况讨论一下这些属性的意义。

Non-ARC

从官方文档的描述上看,Non-ARC的内存管理模式下,编译器会为带有不同属性的property自动生成对应的accessor方法。并且苹果十分建议在可能的情况下通过accessor方法来操纵property,而不是操纵它对应的实例变量。

代理设计模式

代理设计模式

代理delegate就是委托另一个对象来帮忙完成一件事情

为什么要委托别人来做呢,这其实是MVC设计模式中的模块分工问题,例如 View 对象它只负责显示界面,而不需要进行数据的管理,数据的管理和逻辑是 Controller 的责任,所以此时 View 就应该将这个功能委托给 Controller 去实现,当然你作为码农强行让 View 处理数据逻辑的任务,也不是不行,只是这就违背了 MVC 设计模式,项目小还好,随着功能的扩展,我们就会发现越写越难写;还有一种情况,就是这件事情做不到,只能委托给其他对象来做了.

ios技能点总结和存取方法

存储方法是一个可以获得或者设置一个对象的属性值的实例方法

在Cocoa的术语中,一个检索对象属性值的方法提及为getter方法,或者”getter;”,一个改变对象属性值的方法提及为setter方法,或者“setter.”这些方法通常成对建立,提供获得或者设置对象属性值的API。

我们应该使用存储方法而不是直接存储状态数据因为他们提供了一个抽象的层。下面是存储方法所提供的两个好处:

  1. 我们不需要重写我们的代码如果一个描述或者存储属性的方法改变。
  2. 存储方法常常实现重要行为是无论何时一个值被检索或者设置都会被重现。例如,设置方法频繁的实现内存管理代码并且通知其他对象当一个值被改变的时候。