iphone/ipad ios cocoa object-c 近期苹果UI部分小结
ios ui 部分开发心得小结:
1、界面操作:界面搭建布局由xib interface builder 完成就好,需要注意的是它的 view size->autoresizing 设置,这会影响界面元素的布局排版。
需要修改的控件就可以在.h .m 文件里 增加IBOutlet定义 修饰,然后再在IB里绑定好,就可以直接在代码里修改控件了。不需要改动的控件,就无需再定义了。控件响应事件 将方法增加IBAction定义修饰,在IB里绑定好相应事件即可。当然,这些创建绑定操作在可直接在代码里完成。
2、view之间的关系: 要搞清楚各个view之间的关系,(superView subView ),其中比较麻烦的是涉及到坐标系转换的问题。
一个原则就是:按照当前函数所在的view来转换坐标系。如果当前函数a在view A 中,那么外部在调用函数a时,就需事先将point 转换为view A的point,
函数a执行完毕后,也得保证返回的point的坐标系为viewA的。按照此原则来做调用转换的话,就不容易在坐标系上出错了。如有特例的话,就可以在函数命名上指出其所属view 如:hitTestFrameByPointInDocumentView : (CGPoint) point
3、控件使用:查询ios的文档和例子是最好的学习资料,然后是stackoverflow等网站。注意有时需实现控件的delegate方法,类似于java的interface,抽象方法,我自己理解为回调函数。
4、其他常规的数据结构,数组、字典、列表等都大同小异,具体使用时去查就好了。
5、内存问题:注意在dealloc里记得释放实例变量的内存。写setter & getter使用 @property @synthesize 就可以了。
@property (nonatomic, retain) UIView* myView;
@property (nonatomic, assign) BOOL isFinished;
基本类型就不需声明为retain了(增加引用计数)。
在释放实例变量内存时,比较好的写法是:
-(void) dealloc
{
self.myView = nil;
[super dealloc];
}
此处的写法等价于
[myView release];
myView = nil;
使用 . 操作符,相当于调用myView的setter函数,可以查看setter的实现,其内部调用了release。
另外注意不能直接 写成 myView = nil; 这样的话并没有调用到release,会引起内存泄露。下述的内容有提到。
另外这个特点还值得注意,如使用self.xxx赋值时,会调用release 销毁实例。如果只是为了将指针赋空,则应该直接 xxx = nil; 即可
--------------------------------------------
关于这个问题的介绍:http://cocoadevcentral.com/d/learn_objectivec/
We can also use this to improve our dealloc method slightly:
- (void) dealloc { self.caption = nil; self.photographer = nil; [super dealloc]; }
This works because when we set nil as an instance variable, the setter just retains nil (which does nothing) and releases the old value. This approach is often better for dealloc because there's no chance of the variable pointing at random data where an object used to be.
Note that we're using the self.<var> syntax here, which means we're using the setter and picking up the memory management for free. If we just directly set the value like this, there would be a memory leak:
// incorrect. causes a memory leak.
// use self.caption to go through setter
caption = nil;
---------------------------------------------
ps:最近搞了近一个多月的苹果开发,主要负责界面部分。之前并没接触过苹果,这次又算是一次全新的尝试。(从工作以来一直就是在不停的接触新东西,新知识,现在还真不知道这是算好算坏)。最近工作也不是很给力了,大概是没有目标了吧,手头的活干完后自己也全然不会有别的想法了,所以一旦闲下来人就比较颓了。
还得自己挖坑找点事做,不然这样漫无目的的生活未免太无聊乏味了。感觉自己最近几个月思考得太少了,总是被动的等待,没有自己主动的思考判断,这是需要调整的地方。