IOS笔记

1、通知是可以一对多,一般用于一个对象发送消息给多个对象时使用,delegate是一对一

2、delegate一般用assgin来声明,因为考虑到可能出现循环引用的情况()即在互相持有了对方的引用。

3、委托和协议,协议不是类,是一个可以给其它类实现的接口,主要是为了解决objc单继承的问题,这样使得代码更加强大。委托是一种设计模式,他主要是使用协议来实现,这样可以通过设置delegate的属性来使得其它类来实现委托里面定义的方法。

4、点语法是指在property属性的写法里可以通过object.property来获得和设置属性,同时在销毁对象是可以通过self.property = nil来release属性。(等同于 [property release])

5、set语法(self.view = view1)其实等同于

if(view != view1)

{

[view release];

[view1 retain];

view = view1;

}

所以当self.view = nil,其实等同于

if(view != nil)

{

[view release];

[nil retain];//nil retain没有任何作用

view = nil;

}

因此dealloc中经常使用self.X = nil来释放资源。


6、 不要使用0作为UIView的tag

原因:所有的UIView及其子类的默认tag都是0。所以,如果通过UIView的viewWithTag:方法定位tag为0的UIView或其子类时,就有风险定位到不相干的对象上。这往往会花去开发者很多时间去查找这个问题。
解决办法:永远给tag赋大于0的值,并且保证不要出现重复。


获取subview

  通常我们在view层级里面对subView的操作可以通过两种方式:1、保留一个subview的引用,然后在类中通过该引用对该subview进行操作,但是要注意在适当的位置添加内存维护的代码,退出前手动释放。2、设置subview的Tag,让后在要使用的时候,通过viewWithTag获取到相应的subview,这种方法比较简洁,也不用自己去维护内存。

  ViewWithTag: 通常采用深度遍历优先的算法,返回第一个tag和给定Tag相等的subview。这就导致了一个当一个view的多个subview的tag相同的时候,我们通过该方法得到的view可能并不是自己想要的。

  下面通过一个小例子验证一下,代码如下:

SvTestViewTag.h
SvTestViewWithTag.m

  例子中代码创建的view的层次图如下:

 

   例子中每个subview都是一个UILabel,而且设置了相应的内容。按钮的响应函数的实现思路:首先隐藏所有类型为UILabel的subview(排除UIButton,因为button需要一直显示),然后根据指定的Tag获取到相应的subview,该subview及其superView的hidden属性为NO。这样就可以保证点击按钮的时候只显示的是第一个tag和指定tag相等的subview。

  为了验证viewWithTag获取subview的原理:

  首先我在subview1中添加了两个tag都为11的subview11和subview12。 运行程序可以,当我们点击"Show Tag 11"按钮的时候屏幕上将显示“SubView11”,而非“SubView12”。同时不管你点击几次该按钮,始终只显示“SubView11”。这样可以看出来同一层级中获取subview时候查找顺序为index从小到大的原则,即位于相对下层的将首先被找到。

  其次我还在subview1中添加了tag均为13的subview13,同时向view中添加了tag也为13的subview2,运行程序点击“Show Tag 13”按钮,屏幕上将会显示“SubView13”,而非“SubView2”。这可以验证viewWithTag在搜索的时候遵循深度优先遍历的原则,即会首先查找最下层的view并递归查询其subview。

  综上两点我们可以看出来viewWithTag获取subview的基本原则,即遵循深度优先,下层优先两个原则。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值