日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Objective C 中的nil,Nil,NULL和NSNull理解

發布時間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective C 中的nil,Nil,NULL和NSNull理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  kenyo網友的原創說法是:做IOS開發的估計都對Objective-C的內存管理機制很頭疼,一不小心程序就會出內存泄露,我也不例外,前幾天被指針的置nil與release給搞慘了,今和大家詳細解說一下有關Objective-C中nil與release的區別與用法。

? ? 首先說一下他們兩的作用,nil就是把一個對象的指針置為空,只是切斷了指針與內存中對象的聯系,它對內存的釋放沒有什么作用;而release才是真正用于內存釋放的,release后系統會將該塊內存標記為可用(可重新分配)。所以nil并沒有釋放內存,只有release才是真正釋放內存。

? ? 二者使用順序,如果沒有release就直接nil,那么雖然不會出錯(release一個空指針是合法的),但卻等于自己制造了內存泄漏,因為nil之后release就已經不起作用了,我之前的教訓就是一不小心把nil擱在了release之前,所以leak一直報內存泄露。

? ? 相反,如果先release后設置nil,就不會出現這樣的問題,但是有人就會問,release而沒有設置nil,會怎樣?其實程序可能也不會報錯,但是要知道設置nil其實是為了防止指針錯亂,因為一個對象在release之后,給它所分配的內存就已經被釋放了,如果釋放之后不把指針置空的話,系統再誤用到到這個指針時,那么程序就會崩潰(此種情況特別容易出現在延時調用函數中),如果釋放之后把它的指針置為空,則即便后面的程序用到該指針,也不會崩潰。所以Objective-C釋放內存時必須先release然后nil。

  還有一點,在子龍山人的原創文章中有這樣的話:可能有讀者經常看到,在我的教程的dealloc函數里面有這樣的代碼:self.xxx = nil;看到這里,現在你們明白這樣寫有什么用了吧?它等價于[xxx release]; ?xxx = [nil retain];(---如果你的property(nonatomic,retian)xxx,那么就會這樣,如果不是,就對號入座吧)。這就是說,在使用了@property運算符后的類變量會產生set和get方法,而set方法的具體寫法是這樣的:

?

-(void) setNames:(NSArray*)names{
NSLog(@"setNames");
if (_name != name) {
[_name release];
_name = [name retain]; }
}
原來的變量和nil比較,不等于就自動釋放了,然后再執行xxx=[nil retain];語句

?

nil

  • nil 是 ObjC 對象的字面空值,對應 id 類型的對象,或者使用 @interface 聲明的 ObjC 對象。
  • 例如: ?
    NSString *someString = nil; NSURL *someURL = nil; id someObject = nil; if (anotherObject == nil) // do something
  • 定義: ?
    // objc.h #ifndef nil # if __has_feature(cxx_nullptr) #?? define nil nullptr # else #?? define nil __DARWIN_NULL # endif #endif // __DARWIN_NULL in _types.h #define __DARWIN_NULL ((void *)0)

?

Nil

  • Nil 是 ObjC 類類型的書面空值,對應 Class 類型對象。
  • 例如: ?
    Class someClass = Nil; Class anotherClass = [NSString class];
  • 定義聲明和 nil 是差不多的,值相同: ?
    // objc.h #ifndef Nil # if __has_feature(cxx_nullptr) #?? define Nil nullptr # else #?? define Nil __DARWIN_NULL # endif #endif

NULL

  • NULL 是任意的 C 指針空值。
  • 例如: ?
    int *pointerToInt = NULL; char *pointerToChar = NULL; struct TreeNode *rootNode = NULL;
  • 定義: ?
    // in stddef.h #define NULL ((void*)0)

NSNull

  • NSNull 是一個代表空值的類,是一個 ObjC 對象。實際上它只有一個單例方法:+[NSNull null],一般用于表示集合中值為空的對象。
  • 例子說明: ?
    // 因為 nil 被用來用為集合結束的標志,所以 nil 不能存儲在 Foundation 集合里。 NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil]; // 錯誤的使用 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:nil forKey:@"someKey"]; // 正確的使用 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:[NSNull null] forKey:@"someKey"];
  • 定義: ?
    /*? NSNull.h ????Copyright (c) 1994-2012, Apple Inc. All rights reserved. */ #import <Foundation/NSObject.h> @interface NSNull : NSObject <NSCopying, NSSecureCoding> + (NSNull *)null; @end

NIL 或 NSNil

ObjC 不存在這兩個符號!

小結

雖然 nil, Nil, NULL 的值相同,理解它們之間的書面意義才重要,讓代碼更加明確,增加可讀性。

參考資料

  • Difference between nil,NIL and null – Stack Overflow
  • Topics for Cocoa: Using Null.

object c 中的BOOL值與bool值

typedef?signed?char?BOOL; ?

#define?YES??????(BOOL)?1

#define?NO???????(BOOL)?0

從上面的定義我們發現布爾變量的值為 YES/NO,或 1/0 。YES 或 1 代表真,NO 或 0 代表假。比如你定義了一個布爾變量并賦了值:

BOOL enabled = NO;
enabled = 0;

判斷BOOL值為YES:

if(enabled == YES){

}

或者YES可以省略

if(enabled){

}

判斷BOOL值為NO:

if(!enabled){

}

或者

if(enabled != YES){

}

轉載于:https://www.cnblogs.com/baozou/p/3304096.html

總結

以上是生活随笔為你收集整理的Objective C 中的nil,Nil,NULL和NSNull理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线欧美 | 成人精品视频网站 | 色就色综合 | 99热麻豆 | 老熟妇高潮一区二区三区 | 99热网站| 综合热久久 | 深夜啪啪| 中文字幕日韩国产 | 日韩欧美视频一区 | 91久久中文字幕 | 不卡一二三| 少妇在线| 亚洲天堂一区二区三区 | 色涩视频在线观看 | 国产伦精品一区二区三区视频网站 | 五月伊人网 | 亚洲香蕉久久 | 久久综合九色综合欧美狠狠 | 亚欧精品视频一区二区三区 | 久一视频在线 | 在线观看你懂的视频 | 日韩一区二区三区免费视频 | 日韩在线观看不卡 | 成人精品一区二区三区在线 | c逼| 国产高中女学生第一次 | 欧美日韩精品在线观看 | 嫩草在线观看 | 国产综合久久久久久鬼色 | 精品久久电影 | 久久综合色婷婷 | 欧美成人一二三区 | 欧美色交 | 国产精品天天av精麻传媒 | 日韩在线影视 | 婷婷天堂 | 欧美一区二区三区免 | 密臀av在线| 久久精品国产亚洲AV成人雅虎 | 任你操精品视频 | 美女露出让男生揉的视频 | 逼逼爱插插网站 | 欧美另类xxxx | 殴美一区二区 | 中文字幕成人在线视频 | 国产香蕉在线观看 | 久久在线视频免费观看 | 久久久久人妻精品一区二区三区 | 精品视频在线观看免费 | jvid在线| 久久无码人妻丰满熟妇区毛片 | 99热99re6国产在线播放 | 在线观看你懂的网址 | 99热超碰在线 | 精品人妻伦一二三区免费 | 不卡av在线免费观看 | 免费一级淫片aaa片毛片a级 | 操碰在线观看 | 成人av电影天堂 | 天天色天天综合 | 欧美色欧美 | 林天顾悦瑶笔趣阁 | 欧美精品久久久久久久自慰 | 99精品一区二区三区 | 午夜黄色av | 性欧美videos高清hd4k | 18久久久 | 日韩精品成人一区 | 欧美日韩不卡一区二区三区 | 久久成人资源 | 国产高清不卡 | 在线观看免费观看 | 亚洲精品视频免费观看 | 精品一区二区在线观看 | 日本一区二区三区欧美 | 中文字幕亚洲专区 | av在线亚洲天堂 | 久草成人在线视频 | www.99re.| 欧美久久久久久久 | 好男人www社区在线视频夜恋 | 日本午夜小视频 | 成年人黄色网址 | 国产精品久久影院 | 亚洲一区二区黄片 | 午夜毛片视频 | 麻豆精品国产精华精华液好用吗 | 国产精品久久久久久久久绿色 | 日本亚洲黄色 | av网站在线观看免费 | 国产人妖在线视频 | 亚洲综合成人亚洲 | 欧美视频a | 一区二区三区欧美 | 亚洲最大福利网站 | 国产午夜福利视频在线观看 | 国产亚洲无码精品 | 男女调教视频 |