壹: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); // 序列化請求
上面代碼值得注意的是,CFSTR是iPhone中的一個宏,無法為其動態設定Content-Length的長度,例如下面的代碼是無法編譯通過的:
CFHTTPMessageSetHeaderFieldValue(myRequest,
CFSTR("Content-Length"), CFSTR([contentLen UTF8String]));