Day18 UI杂七杂八

UIViewController

UIViewController用来管理UIView,负责创建、显示、销毁、监听UIView内部事件,处理UIView与用户的交互。UIViewController内部有个UIView属性负责管理UIView

@property(nonatomic,retain) UIView *view;

-(void)ViewDidLoad(){

[super viewDidLoad];

}//视图加载完成调用,视图控制器初始化工作

延迟加载、懒加载

在需要时才加载到内存中,运行时判断参数类型,效率上低,内存消耗小

InterfaceBuilder

IBAction & IBOutlet

IBAction:用来和操作建立联系,本身是一个void,不过可建立连线

.h中-(IBAction)click;(左边出现连线)

.m中-(void)click{};

IBOutlet:用来和界面上的元素建立关系,用来获得或修改界面属性

@property(nonatomic,week)IBOutlet UITextView *textView;(左边出现连线)

ps:从xcode5开始,建议将不对外开放的属性和方法写在.m文件中(.m中的()为私有扩展)

项目新建

bundle identifier:产品的唯一标识符,在模拟器上只能有唯一的标志符,AppStore上也唯一,bundle id不支持中文,因此上架前要修改

company identifier:公司反向域名

控件监听

oc中绝大多数控件的监听方法第一个参数是控件本身

[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventsTouchUpInside];//self为UIViewController

-(void)click:(id)sender{//第一个参数为控件本身即btn
}

 

UIView控件属性

@property(nonatomic) GCRect frame;

控件所在矩形框在父控件中的位置和大小,以父控件左上角为原点

@property(nonatomic) GCRect bounds;

控件所在矩形框的位置和大小,以自己左上角为原点,因此x,y为0

@property(nonatomic) GCPoint center;

控件的中点位置,以父控件左上角为原点

@property(nonatomic) GCAffineTransform transform;

控件仿射形变,设置旋转角度、比例缩放、平移,GCAffineTransformMakeTransaction是基于对象初始位置做的形变,因此需要定义delta属性来记录变化量,GCAffineTransformTranslate是基于transform变量做的形变。

ps:在oc中,不允许直接修改”对象“的“结构体属性”的成员,但允许修改对象的“结构体属性”。因此首先要创建临时结构体,取出对象的结构体属性,然后修改结构体成员,最后设置回去对象的结构体属性

断点调试

左侧导航为程序调用的堆栈,调试时要同时注意左边的内存消耗,动画做完的数组要及时清理

strong/weak

1、懒加载的getter用strong

2、界面的控件用weak,因为addSubView已经让View强引用了

3、属性对象用strong

4、字符串NSString用copy

5、非对象用assign

运行循环

addTarget会把用户点击按钮的事件监听注册到运行循环中。

instancetype代替id

instancetype可以使编译器检查实例化对象的准确类型返回,但只能用于返回类型,不能当参数使用

- (instancetype)initWithPerson:(Person *)person;

init方法应对应个工厂方法 

+ (instancetype)appInfoWithPerson:(Person *)person;

命名

1、类方法名以类名称开头

2、Mutable类型的变量如personM,后面加M

description

如果要打印对象重写description方法,类似于java的toString

KVC/KVO

key value coding键值编码

key value observe键值观察

 

你可能感兴趣的:(ios)