iPhone開發技巧筆記壹

壹:iPhone內存管理中,涉及到malloc在堆上分配內存時,需要使用對應的free釋放堆內存,而不是單純的release相關的對象了事,如下代碼:

@interface MemoryTestProjViewController : UIViewController {

@public

NSMutableArray * memoryArray;

}

 

@end

 

@interface MemoryTestProjItem : NSObject

{

@public

char * innerItem;

}

@end

 

在進行初始化時爲innerItem指針在堆空間上分配內存,但是要記得調用free函數進行堆空間的釋放,代碼如下:

- (void)viewDidUnload {

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

 

memoryArray = [[NSMutableArray alloc] initWithCapacity:10];

 

for(int i = 0;i < 1024;i++)

{

     MemoryTestProjItem* item = [[MemoryTestProjItem alloc] init];

    

     item->innerItem = (char*)malloc(1024);

    

     [memoryArray addObject:item];

    

     [item release];

     free(item->innerItem);

     free(item);

}

[memoryArray removeAllObjects];

}

貳:iPhone中如果使用CFHTTPMessageRef進行HTTP通訊的開發,那麼默認頭信息裏並沒有Content-Length內容,需要進行顯示的設置,代碼如下:

NSString* contentLen = [[NSString alloc] initWithFormat"%d",[bodyData length]];

CFHTTPMessageSetHeaderFieldValue(myRequest,

CFSTR("Content-Length"), (CFStringRef)contentLen);

    

CFDataRef mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest); // 序列化請求

上面代碼值得注意的是,CFSTRiPhone中的一個宏,無法爲其動態設置Content-Length的長度,例如下面的代碼是無法編譯通過的:

CFHTTPMessageSetHeaderFieldValue(myRequest,

CFSTR("Content-Length"), CFSTR([contentLen UTF8String]));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章