降低耦合性
- (ibaction)dosomething:(id)sender
將引數的型別設定為id可以降低控制器與其控制的view(控制項也屬於view)之間的耦合性,因為這樣在改變所使用的view時,控制器不需要作任何修改。
使用執行緒注意事項
慎用執行緒,能不開執行緒的地方盡量不開執行緒。如確實需要使用執行緒時,需要主要以下幾點:
1.如果新執行緒執行的內容(selector)是由當前物件所提供,則完全可以使用 [self performselectorinbackground:withobject:]代替[nsthread detachnewthreadselector:totarget:withobject:]。
2.新執行緒執行的內容(selector)中需要設定自動釋放池,以避免記憶體洩漏。
-(void)somemethodexcutedbynewthread{
nsautoreleasepool* pool = [[nsautoreleasepool alloc]init];
...//新執行緒具體執行的內容。
[pool drain];
3.嚴格的說,在非主線程中修改view是不合理的。雖然大多數情況,非主線程中修改view中的內容並不會出問題,但你不能99.999%的安全。所以不推薦在非主線程中修改控制項或view中的內容。
下面是如何使用執行緒的具體例項:
- (void)updateprogressview:(nsarray *)progressviewandprogress{
uiprogressview *progressview = [progressviewandprogress objectatindex:0];
nsnumber *progress = [progressviewandprogress objectatindex:1];
//執行到這裡時, progressview物件肯定還存在,不管self.view存不存在。所以不需要判斷progressview是否已經完成被釋放了
progressview.progress = [progress floatvalue];
- (void)downloadpic:(uiprogressview *)progressview{
nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];
nsnumber *progress;
nsarray *progressviewandprogress;
for (int i = 0; i < 100; i++) {
progress = [nsnumber numberwithfloat: (i + 1.0) / 100];
progressviewandprogress = [nsarray arraywithobjects:progressview, progress, nil];
= (i + 1.0) /100; 這樣不行,非要在另外乙個執行緒中更新才行
[self performselectoronmainthread:@selector(updateprogressview:)
withobject:progressviewandprogress
waituntildone:yes];
[pool drain];
- (ibaction)dowloadpicandupdateprogressview:(id)sender{
uiprogressview *progressview = [[uiprogressview alloc] initwithprogressviewstyle:uiprogressviewstyledefault];
progressview.center = cgpointmake(300, 400);
progressview.bounds = cgrectmake(0, 0, 300, 10);
[self.view addsubview:progressview];
//可以使用[nsthread detachnewthreadselector:@selecto(downloadpic:) totarget:self withobject:progressview]代替
[self performselectorinbackground:@selector(downloadpic:) withobject:progressview];
//這樣做會卡住介面
//[self performselectoronmainthread:@selector(downloadpic:) withobject:progressview waituntildone:no];
[progressview release];
iPhone遊戲開發
總的來說這個問題比較好解決,xcode新建的工程中就有opengl es這一項,基本的呼叫關係都給你弄好了。下面說說我開發的過程 說到底我絕大多數時間還是在win平台下進行開發的,儘管業界說mac的系統如何如何好,xcode功能如何如何強大,但還是感覺沒有windows好用,沒有vs方便 這個問題也...
iphone開發雜談
很久沒看到這麼好的文章了,此文摘自stackoverflow的翻譯,獻給iphone開發的同仁們,同時也給自己做個筆記 192個加分的回答 有些初學時的做法,現在我認為是不標準的。2 說起來私有,我傾向於把似有方法定義在.m檔案裡,放在乙個私有的category內,如下 import myclass...
iphone開發前景
說起iphone開發,必然要先說說iphone了,也就是蘋果手機,總體來說,蘋果手機的出現帶動了一系列的it行業的迅猛增長,在2007 年6月29日蘋果公司首發iphone,在當年9月10日iphone就突破了100萬台,蘋果公司股價漲至180美元,由於蘋果手機硬體和系統幾乎完美的結合,給了使用者非...