首先alloc和allocWithZone都是創建壹個對象實例
使用alloc方法創建壹個類的實例的時候,其實最後還是會調用 allocWithZone 方法。在OC中allocWithZone這個方法應該是棄用了的,只是由於歷史原因蘋果還保留著這個函數。
據史料記載,NSZone是用來分配和管理壹段內存空間的壹個結構體。
然後我們查看NSZone的頭文件發現以下幾個函數
看起來跟C語言的malloc,calloc,free等函數相似,所以大概NSZone就是可以分配壹段連續空間。妳可以將妳創建的類實例都存在這個空間,自己管理。
比如妳都用allocWithZone創建三個NSDictionary ,那這三個字典肯定是連在壹起存儲的。然後妳連著讀取三字典的數據,地址相鄰理論上讀取速度更快。
反正當年肯定用這個有好處,現在蘋果都幫妳處理好了,不用管了,官方也不建議再用這個接口了。
那麽最後答案就是:
alloc和allocWithZone都是創建壹個類實例的方法
不同之處在於,alloc無法指定壹個NSZone來存儲自己創建的實例,它最終調用的是allocWithZone(nil),使用的是系統給定的NSZone
allocWithZone可以指定自己的NSZone來存儲自己創建的實例,如果zone傳nil 它使用的就是系統給定的NSZone