1. 程式人生 > >iOS NSDictionary及NSArray初始化後nil指標的影響

iOS NSDictionary及NSArray初始化後nil指標的影響

//聯絡人:石虎  QQ: 1224614774暱稱:嗡嘛呢叭咪哄

一、reason(原因)總結

reason*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'

reason *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[4]'

reason *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]’ 


這個問題,一般是因為 nsarraynsdictionary插入資料為空而造成的

二、reason截圖

NSArray圖:


NSDictionary圖:


三、例項程式碼

 假設我們現在要初始化一個{key1 : value1, key2 : value2, key3 : value3}的NSDictionary,一般有兩種初始化方法:

1、使用標準的初始化方法:

NSDictionary *dictionary[[NSDictionaryalloc] initWithObjectsAndKeys:value1,@"key1",value2,@"key2", value3 ,@"value3"
,nil];

2、使用ios6.0以後新支援的初始化方法:

NSDictionary *dictionary [email protected]{@"key1" : value1,@"key2" : value2,@"key3" : value3};

現在我們對value1 value2 value3進行賦值,並把value2設為nil指標:

NSString *value1 =@"value1";NSString *value2 =nil;NSString *value3 =@"value3";

3、另一種解決方法就是使用標準的初始化方法,即第一種初始化方法。但同時也要注意一個問題,使用

NDictionary *dictionary = [[NSDictionaryalloc]initWithObjectsAndKeys:value1,@"key1",value2,@"key2", value3 ,@"value3",nil];

如果我們把其中一個key或者value設為nil指標,那麼系統會判斷為全部物件插入完成,即相當於我們初始化陣列及字典時最後的nil。因此這種方法雖然能避免插入nil指標時丟擲的異常,但可能會成為一個工程中很大的安全隱患,並且難以發現。所以推薦使用第二種初始化方法,並對nil指標進行必要的判斷,選擇性使用[NSNull null]來實現特點的需求。同理,使用NSArray時也應該注意這類問題。


謝謝!!!


相關推薦

iOS NSDictionaryNSArray初始nil指標影響

//聯絡人:石虎  QQ: 1224614774暱稱:嗡嘛呢叭咪哄 一、reason(原因)總結 reason*** -[__NSArrayM objectAtIndex:]: index

nil指標NSDictionaryNSArray初始影響

最近在做專案的時候遇到一個挺坑的崩潰問題,是由於NSDictionary初始化時nil指標引起的崩潰。假設我們現在要初始化一個{key1 : value1, key2 : value2, key3 : value3}的NSDictionary,一般有兩種初始化方

c++字元陣列未初始初始元素內容及其'\0'問題解析

1、字元陣列未初始化之前,裡面的值是什麼? (1)字元陣列定義在main函式外面,a[i]的值為’\0’(i=1,2,3…),(int)a[i]的值為0。 int a[5] ,則: a[0] a[1] a[2] a[3]

java變數的初始的預設值

對於類的成員變數 不管程式有沒有顯示的初始化,Java 虛擬機器都會先自動給它初始化為預設值。 1、整數型別(byte、short、int、long)的基本型別變數的預設值為0。 2、單精度浮點型(float)的基本型別變數的預設值為0.0f。 3、雙精度浮點型(double

tensorflow 僅初始指定的variables初始的variables

1. 已知variables v0,v1,v2,對特定的variables進行初始化可使用以下方法: initialize_op = tf.variables_initializer([v0,v1,v2]) sess.run(initialize_op)  2. rest

c# 自動實現屬性 隱式型別 物件集合初始 匿名型別

Demo  using System; using System.Collections.Generic; namespace IntelligentCompiling { class Program { static void Main(str

mysql5.7.24免安裝版配置密碼初始mysql-font連線異常

1、解壓檔案,例如:置於E:\Program Files\mysql-5.7.24-winx64,新建my.ini ,內容如下: [mysqld] # 設定為自己MYSQL的安裝目錄 basedir=E:\Program Files\mysql-5.7.24-winx64 # 設定為MYSQL的資

Spring容器初始執行某個指定的方法

1.配置springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://ww

Ios短視訊開發初始短視訊失敗或延時太長的問題原因分析

在人們都追求快節奏的現在,手機APP開啟速度都會成為購買手機時要考慮的重要問題,聯通網路公司斷網半個小時能引起民憤,那麼移情考慮到短視訊平臺上來說,在視訊播放方面,初始化短視訊的時間當然是越短越好。 現如今所有的短視訊平臺在音視訊傳輸方面大都使用的是流媒體傳輸,至於伺服器方面也不是我們敲段程式碼

最詳細React Native環境配置專案初始(2018-10-14)

注意配環境一定要全程使用穩定VPN工具,否則會浪費大量時間!!!相信我 一.截止到專案初始化之前也就是執行這條命令之前都按官網的方法就可以 https://reactnative.cn/docs/getting-started.html react-native ini

JAVA類初始例項初始時內部的執行順序

       記得剛畢業時,應聘JAVA開發崗位,做招聘單位的筆試時,經常有JAVA類內部的執行順序的考察,就是讓你寫出某個程式的列印結果的順序,現在整理一下。        如果一個類,有構造器,普通塊,靜態塊,那該類初始化時,它的執行順序如何呢?如果它有父類,並且它的父

mysql5.7的初始密碼找回

1 通過日誌檔案中給出的預設密碼 grep password /var/log/mysqld.log 2 日誌檔案發生意外後,vim /etc/my.cnf 新增skip-grant-tables=1 或者skip-grant-tables 儲存後重啟資料庫服務 mysql -uroot 即

Nand flash(三)暫存器硬體初始分析

關於NAND Flash S5PV210的NAND Flash控制器有如下特點: 1) 支援512byte,2k,4k,8k的頁大小 2) 通過各種軟體模式來進行NAND Flash的讀寫擦除等 3) 8bit的匯流排 4) 支援SLC和MCL的NAND Flash 5) 支

Window7安裝MariaDB 系統初始

MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社群在維護,採用GPL授權許可。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,因此社群採用分支的方

STM32值SPI的使用SPI初始注意事項

在STM32F10x系列晶片中,雖然所擁有的SPI同步串列埠數量不相同,但是初始化的方法都是一樣的。其中使用SPI時候我們回憶GPIO的使用,要注意6點,我們這裡主要講解一點。 根據系統對該不同功能的要求,初始化不同功能外設,初始化GPIO,初始化SPI同步串列埠裝置就會比

easyui的select初始不能操作選擇

在頁面中應用了一個select下拉框,<select id="language"  class="easyui-combobox" title="網站語言" style="editable:false;">但是初始化賦值時$('#language').comb

開源私有云平臺Nano v0.7.1釋出 - 新增使用者許可權管理系統初始

各位新年好,0.7.1帶著使用者管理功能來了 當用戶首次開啟Nano頁面時,系統會提示建立初始的超級管理員賬號;成功登陸後,管理員可以在使用者頁面管理多使用者、使用者組和選單角色。 有了使用者鑑權和許可權控制,您可以在自己的組織和企業裡更加安全地體驗和管理Nano了 使用者登入後可以在介面底部看到當

開源私有雲平臺Nano v0.7.1發布 - 新增用戶權限管理系統初始

此外 leg 基於 系統初始 使用 install 還原 平臺 雲主機 各位新年好,0.7.1帶著用戶管理功能來了 當用戶首次打開Nano頁面時,系統會提示創建初始的超級管理員賬號;成功登陸後,管理員可以在用戶頁面管理多用戶、用戶組和菜單角色。 有了用戶鑒權和權限控制,您可

關鍵字static物件初始順序

以下內容參考:https://www.cnblogs.com/dolphin0520/p/3799052.html 1.static 變數 靜態變數和非靜態變數的區別: 靜態變數在方法區被所有的物件所共享,在記憶體中只有一個副本,它當且僅當在類初次載入時會

MTK IMS框架簡析(1)——程式碼架構模組初始

1.前言 隨著4G技術的誕生和國內運營商網路的全面升級,以往流量貴上網慢的問題不再有,而類似微信這類即時通訊軟體也得到快速的普及,網際網路行業的發展還延伸到金融/零售等線上線下的各行各業,短短几年內國內IT產業迎來全面的機遇。而得益於移動網路技術的突破,政策的