接下來當然是說明性的,但是這是在本質上是怎麼回事。
您似乎誤解了什麼變量是,它只是一個盒子。當你寫:
NSInteger rowCount;
您請求該系統發現一個盒子,從一堆未使用的盒子,這就是存儲NSInteger
類型的值合適的尺寸。在計算機中有很多盒子,它需要一個相互區分的盒子,所以每個盒子都有一個名稱。這個名字很難理解,例如:
0000000000001101000111001110110110111110111011111100101011111110
因爲電腦通常只使用0和1。你不能使用你會保持打字錯了一個計算機程序,即使你的代碼它改變爲更合適的人是毫無意義的:
D1CEDBEEFCAFE
它仍然是沒有意義的。
(他們真的是一樣的!不過當然我挑那些0'1和1的細心,大多數名字並不那麼令人難忘。)
鑑於這種計算機語言允許您使用更可讀有意義的名字,上面的rowCount
,用來指代你所要求的方框 - 編譯器保持你的名字到真實名字的映射。
重要提示:上述所有是關於如何在變量(又名框)命名的,它有什麼做的值,你可能會放在這個盒子。所以,當你寫:
rowCount = 42;
價值42
尚未獲得了rowCount
的替代名稱,所有已經發生的值42
已被放置在一個名爲rowCount
箱(在本例中爲一個方便的名字電腦箱D1CEDBEEFCAFE
)。如果你以後寫:
NSInteger anotherRowCount = rowCount;
那麼值在rowCount
,目前42
,被複制到一個名爲anotherRowCount
箱。如果您查看anotherRowCount
框,您所看到的全部爲42
,但沒有提及該值來自rowCount
。
變量名和這些變量包含的值是不同的,並且名稱和值之間沒有關聯。
現在,如果你回頭看看你的代碼更復雜一些,而不是抱着你那些拿着NSMutableArray *
值NSInteger
值盒 - 但這並不改變正在發生的事情的本質,一個盒子一個盒子。
您首先要求提供三個框,然後將值放在您命名爲array1
和array2
的那些框中。
接下來,您在您已命名的框中輸入一個值section
(總是使用小寫字母開始變量名稱)。您放入section
中的值不是簡單的,例如42
,而是一個可以保存其他值的值。
然後你複製的值在兩個盒子array1
和array2
,並將它們添加到value
您儲存箱section
。那些複製的值與它們來自的框名稱無關,框名稱array1
和array2
未被複制到存儲在框section
中的值中。
那麼,什麼是存儲在箱子array1
,array2
和section
的值?
儘量不要去鬥眼在這一點上...
上面我說的是存儲在section
價值並不簡單,像42
,而是一個可容納其他值。 array1
和array2
也是如此。但那是什麼價值?那麼它是NSMutableArray *
類型的東西,我們知道,因爲這是我們所要求的 - 三盒可以容納NSMutableArray *
值。
*
in NSMutableArray *
表示「盒子名稱」!所以NSMutableArray *
這個類型是「盒子的盒子名稱,其值爲NSMutableArray
」。當你寫:
section = [[NSMutableArray alloc]init];
右手邊是要找到能夠保持NSMutableArray
值一箱的指令(注:無*
),並且該指令返回那個盒子當做的名其值。該值存儲在section
中。並且該值是不是像aBigBoxWhichCanHoldAnNSMutableArray
,甚至fred
,指令上面並沒有給它一個很好的友好名稱 - 它只是一個盒子中的計算機名稱,類似:
1101111010101101111110101100111011011110101011011111101011001110
什麼這一切的手段就是當你寫:
[section addObject: array1];
的值在array1
被複制到存儲在section
的值。那值是一個框名稱,但它肯定不是"array1"
或甚至計算機的真實姓名爲您已調用array1
的框。它是存儲在該框內的名稱,該名稱對您來說基本上沒有意義 - 一串0和1的長串。
希望可以幫助更多的混淆!
「名稱」?你究竟是什麼意思? var的名字?你能展示預期的產出嗎? – Larme
是不是你想使用NSMutableDictionary而不是NSMutableArray? (有一個鍵=>數組關聯) –
我想獲取數組名稱而不是數組內容 – Neo