ios基礎

 

1、assign、retain、copy使用環境

assign適合於基礎類型,基礎類型有c語言基礎數據類型(int, float, double, char,bool),obc基礎數據類型(NSInteger,CGFloat)

copy適合於NSString

retain適合於繼承NSObject的對象,包括NSNumber(只有NSNumber能存放在NSMutableArray),需要手動release

 

2、爲什麼很多內置的類,如TableViewController的delegate的屬性是assign不是retain

循環引用
所有的引用計數系統,都存在循環應用的問題。例如下面的引用關係:
  •    對象a創建並引用到了對象b.
  •    對象b創建並引用到了對象c.
  •    對象c創建並引用到了對象b.
這時候b和c的引用計數分別是2和1。當a不再使用b,調用release釋放對b的所有權,因爲c還引用了b,所以b的引用計數爲1,b不會被釋放。b不釋放,c的引用計數就是1,c也不會被釋放。從此,b和c永遠留在內存中。
這種情況,必須打斷循環引用,通過其他規則來維護引用關係。比如,我們常見的delegate往往是assign方式的屬性而不是retain方式的屬性,賦值不會增加引用計數,就是爲了防止delegation兩端產生不必要的循環引用。如果一個UITableViewController 對象a通過retain獲取了UITableView對象b的所有權,這個UITableView對象b的delegate又是a,如果這個delegate是retain方式的,那基本上就沒有機會釋放這兩個對象了。自己在設計使用delegate模式時,也要注意這點。

 

3、nil表示一個Objctive-C對象,這個對象的指針指向空,類似於c語言的NULL,Nil定義的是一個指向空的類(是Class非對象)

     id是一個指向任何一個繼承了Object(或者NSObject)類的對象,id本身是一個指針,id *id則定義了一個指針,這個指針指向另一個指針

 

4、Xcode有四種build for

分別是:
build for Running:Running最常用的一種,在模擬器或者設備上運行
build for Testing:Testing單元測試所用
build for Profiling:Profiling測試各種性能問題,內存泄露等問題,主要是彌補單元測試覆蓋不到的地方
build for Archiving:Archiving出包用
 

5、java與object-c的數據類型
     java (字節)               object-c(字節)

 char        16                     8

 int           32                  16(有符號:-32768至32767,無符號:0至65535)

short       16                                   16(類似int)

long        64                                   32(有符號:-2147483648至2147483627,無符號:0至4294967295)

float        32                                   32(類似無符號long)

double   64                                   64

longdouble -                                128


6、

http://mobile.51cto.com/iphone-278593.htm

打包






Object-C內存管理口訣

1           口訣。

1.1          誰創建,誰釋放(類似於“誰污染,誰治理”)。如果你通過allocnewcopy來創建一個對象,那麼你必須調用releaseautorelease。換句話說,不是你創建的,就不用你去釋放。
例如,你在一個函數中alloc生成了一個對象,且這個對象只在這個函數中被使用,那麼你必須在這個函數中調用releaseautorelease。如果你在一個class的某個方法中alloc一個成員對象,且沒有調用autorelease,那麼你需要在這個類的dealloc方法中調用release;如果調用了autorelease,那麼在dealloc方法中什麼都不需要做。

1.2          除了allocnewcopy之外的方法創建的對象都被聲明瞭autorelease

1.3          retain,誰release。只要你調用了retain,無論這個對象是如何生成的,你都要調用release。有時候你的代碼中明明沒有retain,可是系統會在默認實現中加入retain。不知道爲什麼蘋果公司的文檔沒有強調這個非常重要的一點,請參考範式2.7和第三章。

2           範式。
範式就是模板,就是依葫蘆畫瓢。由於不同人有不同的理解和習慣,我總結的範式不一定適合所有人,但我能保證照着這樣做不會出問題。

2.1          創建一個對象。

ClassA *obj1 = [[ClassA alloc] init];

2.2          創建一個autorelease的對象。

ClassA *obj1 = [[[ClassA alloc] init] autorelease];

2.3          Release一個對象後,立即把指針清空。(順便說一句,release一個空指針是合法的,但不會發生任何事情)

[obj1 release];

obj1 = nil;

2.4          指針賦值給另一個指針。

ClassA *obj2 = obj1;

[obj2 retain];

//do something

[obj2 release];

obj2 = nil;

2.5          在一個函數中創建並返回對象,需要把這個對象設置爲autorelease

ClassA *Func1()

{

  ClassA *obj = [[[ClassA alloc]init]autorelease];

  return obj;

}

2.6          在子類的dealloc方法中調用基類的dealloc方法

-(void) dealloc

{

         …

         [super dealloc];

}

2.7          在一個class中創建和使用property

2.7.1     聲明一個成員變量。

ClassB *objB;

2.7.2     聲明property,加上retain參數。

@property (retain) ClassB* objB;

2.7.3     定義property。(property的默認實現請看第三章)

@synthesize objB;

2.7.4     除了dealloc方法以外,始終用.操作符的方式來調用property

self.objB 或者objA.objB

2.7.5     dealloc方法中release這個成員變量。

[objB release];

示例代碼如下(詳細代碼請參考附件中的memman-property.m,你需要特別留意對象是在何時被銷燬的。):

@interface ClassA : NSObject

{

         ClassB* objB;

}

 

@property (retain) ClassB* objB;

@end

 

@implementation ClassA

@synthesize objB;

-(void) dealloc

{

         [objB release];

         [super dealloc];

}

@end

2.7.6     給這個property賦值時,有手動releaseautoreleasehttp://種方式。

void funcNoAutorelease()

{

         ClassB *objB1 = [[ClassB alloc]init];

         ClassA *objA = [[ClassA alloc]init];

         objA.objB = objB1;

         [objB1 release];

         [objA release];

}

 

void funcAutorelease()

{

         ClassB *objB1 = [[[ClassB alloc]init] autorelease];

         ClassA *objA = [[[ClassA alloc]init] autorelease];

         objA.objB = objB1;

}


另外:http://blog.sina.com.cn/s/blog_6abfa7ce0100vc26.html



http://www.cnblogs.com/woainilsr/archive/2012/03/28/2421881.html


http://www.cocoachina.com/applenews/devnews/2012/1126/5178.html


發佈了52 篇原創文章 · 獲贊 4 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章