iOS 开发入门基础(01)-- iOS 当中的基本数据类型

相信大家针对于当前iOS的环境每个人都有自己的看法,但是基于我一个不算太资深的iOS程序员来说,iOS的市场还是有的,但是水已经比较深了,针对于想入这行的猿友门一定要慎重而行。

针对于当前技术能力参差不齐的现状所以我打算从基础到一个完整项目,写一套有关于iOS开发的博文,希望可以对大家有所帮助,话不多说开始第一篇文章。

一、OC当中涉及到的数据类型 

long(长整型) 

int (整型)

shot(短整型) 

float (浮点型)

double(双精度浮点型)

char(字符型)

由于这些类型都是最最基础的数据类型,涉及到很多C的知识,就不过多的解释了,这些在iOS项目中会有使用到,但是不是最常用的类型,因为OC当中针对这些数据类型都有很好的替换类型。

二、OC自身的数据类型

1).NSInteger  NSUInteger  NSNumber

 1.NSIntiger OC当中的整型(有正负之分,带有符号标识)

 2. NSUInteger 也同样是OC当中的整型(无符号类型 ,不带有正负之分)

 3.NSNumber 对象数据类型,主要用于存储非对象类型,其主要作用是将非对象类型转化为对象类型来进行存储

            - (NSNumber*)initWithChar:(char)valueNS_DESIGNATED_INITIALIZER;//将字符类型转换为对象类型

            - (NSNumber*)initWithUnsignedChar:(unsignedchar)valueNS_DESIGNATED_INITIALIZER;//将无符号字符类型转换为对象类型

            - (NSNumber*)initWithShort:(short)valueNS_DESIGNATED_INITIALIZER;//将短整型转换为对象类型

            - (NSNumber*)initWithUnsignedShort:(unsignedshort)valueNS_DESIGNATED_INITIALIZER;//将无符号短整型转换为对象类型

            - (NSNumber*)initWithInt:(int)valueNS_DESIGNATED_INITIALIZER;//将整型转换为对象类型

            - (NSNumber*)initWithUnsignedInt:(unsignedint)valueNS_DESIGNATED_INITIALIZER;//将无符号整型转换为对象类型

            - (NSNumber*)initWithLong:(long)valueNS_DESIGNATED_INITIALIZER;//将长整型转换为对象类型

            - (NSNumber*)initWithUnsignedLong:(unsignedlong)valueNS_DESIGNATED_INITIALIZER;//将无符号长整型转换为对象类型

            - (NSNumber*)initWithLongLong:(longlong)valueNS_DESIGNATED_INITIALIZER;

            - (NSNumber*)initWithUnsignedLongLong:(unsignedlonglong)valueNS_DESIGNATED_INITIALIZER;

            - (NSNumber*)initWithFloat:(float)valueNS_DESIGNATED_INITIALIZER;//将浮点型转换为对象类型

            - (NSNumber*)initWithDouble:(double)valueNS_DESIGNATED_INITIALIZER;//将双精度浮点型转换为对象类型

            - (NSNumber*)initWithBool:(BOOL)valueNS_DESIGNATED_INITIALIZER;//将bool值类型转换为对象类型

            - (NSNumber*)initWithInteger:(NSInteger)valueAPI_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0))NS_DESIGNATED_INITIALIZER;//针对OC当中的整型转换为对象类型

            - (NSNumber*)initWithUnsignedInteger:(NSUInteger)valueAPI_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0))NS_DESIGNATED_INITIALIZER;//针对OC当中的无符号整型转换为对象类型

            //下面是对象转换成对应数据类型的反向取值

            @property (readonly) char charValue;

            @property (readonly) unsigned char unsignedCharValue;

            @property (readonly) short shortValue;

            @property (readonly) unsigned short unsignedShortValue;

            @property (readonly) int intValue;

            @property (readonly) unsigned int unsignedIntValue;

            @property (readonly) long longValue;

            @property (readonly) unsigned long unsignedLongValue;        

            @property (readonly) long long longLongValue;

            @property (readonly) unsigned long long unsignedLongLongValue;

            @property (readonly) float floatValue;

            @property (readonly) double doubleValue;

            @property (readonly) BOOL boolValue;

            @property(readonly)NSIntegerintegerValueAPI_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

            @property(readonly)NSUIntegerunsignedIntegerValueAPI_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

           //将对象类型统一转换成字符串类型(不会强转,意思就是对象中储存的是什么内容就直接全部放进字符串中并展示)

            @property (readonly, copy) NSString *stringValue;

            //对象比较方法(返回值有三种 NSOrderedAscending(小于)NSOrderedSame(等于)NSOrderedDescending(大于))

            - (NSComparisonResult)compare:(NSNumber*)otherNumber;

            //对象比较方法(返回值有两种 相等(YES)或者不相等(NO))

            - (BOOL)isEqualToNumber:(NSNumber*)number;

关于NSNumber的使用操作如下代码

//基本类型转为对象类型

    chara ='a';

    NSLog(@"%c", a);

    NSNumber *number = [[NSNumber alloc] initWithChar:a];  //NSNumber 类型的初始化,其余基本类型转化为number类型的使用是一样的。

    NSLog(@"%@",number);

//对象类型转为基本类型

    char b = number.charValue;

    NSLog(@"%c",b);

输出代码如下

2019-02-20 09:52:09.161082+0800 test01[870:179068] a  

2019-02-20 09:52:09.161159+0800 test01[870:179068] 97   //注意这里是ASCII码表下字符a对应的十进制数据,NSNumber当中的字符存储都是使用的ASCII码

2019-02-20 09:52:09.161175+0800 test01[870:179068] a

关于NSNumber对象的比较方法

    chara ='a';

    charc ='s';

    NSNumber *number1 = [[NSNumber alloc] initWithChar:a];

    NSNumber *number2 = [[NSNumber alloc] initWithChar:c];

    NSLog(@"%@",number1);

    NSLog(@"%@",number2);

    NSLog(@"%ld",[number1compare:number2]);//比较两个对象的大小

    NSLog(@"%d",[number1isEqualToNumber:number2]);//判断是否两个对象相同

输出结果如下

2019-02-20 10:02:25.171390+0800 test01[880:180846] 97 //对象number1的ASCII码表对应的值

2019-02-20 10:02:25.171439+0800 test01[880:180846] 115 //对象number2的ASCII码表对应的值

2019-02-20 10:02:25.171453+0800 test01[880:180846] -1 //两者比较结果 -1为小于 0为等于 1为大于 

2019-02-20 10:02:25.171469+0800 test01[880:180846] 0 //两者是否相同的结果 0为不相同 1为相同

2).CGFloat 

OC当中的浮点类型,也是开发中主推使用的浮点类型,因其兼容64位操作系统,所以在定义浮点类型的时候还是推荐使用CGFloat类型。

3). NSString

OC当中最常用的对象类型,其存储的对象类型值为字符串,常用于针对视图控件上文字内容的赋值使用。

1.初始化方法

    NSString *str1 = [[NSString alloc] initWithString:@"测试01"];

    NSString*str2 =@"测试02";

    //str1 完全等价于 str2 ,一般直接使用@“”对NSString对象直接赋值

    NSInteger num = 33;     

    NSString *str3 = [NSString stringWithFormat:@"%@%ld",str2,num];//格式化初始化对象 常用于需要不同类型的数据拼接后形成的一个字符串对象,str3 最终值为@“测试0233”

2.字符串截取和替换

    NSString*str2 =@"测试02";

    //字符串截取方法

    [str2 substringFromIndex:1]; //从下标为1的位置开始截取直到字符串最后一位。结果为 “试02”

    [str2 substringToIndex:1]; //从下标为0的位置开始截取到下标为1的位置结束。 结果为 “测”

    [str2 substringWithRange:NSMakeRange(0, 3)];//从下标为0 的位置开始截取 截取长度为3的字符串。结果为“测试0”,其中第一个数字“0”为截取的起始位置 第二个数字 “3”为截取的长度。

    [str2 componentsSeparatedByString:@"0"];//从指定字符串位置分割当前字符串,其返回值为数组类型(此类型后面会有解释 现在单纯只是知道就好)结果为“测试”  “2”

    需要注意的是无论是哪种截取方式,指定开始或者结束位置是一定要考虑字符串长度的问题,因为超长会导致越界崩溃,以此为例,字符串长度为4 当我们使用[str2 substringFromIndex:5];此方法进行截取时会产生崩溃问题,崩溃日志如下:

     *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSCFConstantString substringFromIndex:]: Index 5 out of bounds; string length 4'

    //字符串替换方法

    [str2 stringByReplacingCharactersInRange:NSMakeRange(0, 2) withString:@"你好吗?"];//将制定位置的字符串进行替换 结果为“你好吗?02”

    [str2 stringByReplacingOccurrencesOfString:@"0" withString:@"01"];//将字符串中包含的指定字符进行替换 结果为“测试012”

    //这里需要注意的是在指定位置进行替换的时候也要考虑长度越界的问题,还有需要注意的地方是在替换字符串的时候并不是1:1来进行替换的 可以1:0也可以1:n

3.字符串比较

字符串比较的方法和上面介绍的NSNumber的比较方法是一致的,需要的可以返回去看看。

4).NSMutableString

同样也是OC当中储存字符串的对象类型。其区别是NSString为不可变字符串而NSMutabuleString为可变字符串。

与NSString的区别

在看到这里肯定有不少的人在疑问,这个可变和不可变指的到底是什么意思呢?因为我们一般在使用NSString创建出的对象我们可以直接对他的内容进行修改的,而且也不会出现问题的,下面我们用代码来看下他们具体的区别:

    NSString*str2 =@"测试02";

    NSLog(@"%p",str2);

    str2 =@"cecece";

    NSLog(@"%p",str2);

    NSMutableString *str1 = [[NSMutableString alloc] initWithString:@"测试01"];

    NSLog(@"%p",str1);

    [str1insertString:@"222" atIndex:2];

    NSLog(@"%p",str1);

    //其打印结果为:

    2019-02-20 14:52:44.765117+0800 test01[1123:235758] 0x102344068 

    2019-02-20 14:52:44.765170+0800 test01[1123:235758] 0x1023440a8

    2019-02-20 14:52:44.765186+0800 test01[1123:235758] 0x281c6ce10

    2019-02-20 14:52:44.765199+0800 test01[1123:235758] 0x281c6ce10

从结果我们就可以看出当我们针对str2来进行修改的时候其实就是在内存地址中从新给str2指向一个新的地址,而我们在对str1进行操作的时候就是在当前地址上对当前地址上的内容进行的修改。由此可以看出可变不可变其实指的是只想当前内存地址上的内容是否可变。(各位要是对内存了解的不太深那请好好去看下C语言当中内存的部分。在这里就不过多的解释了)

此次咱们这一篇文章就算结束了,下一篇我们要说的是OC中的集合类型,喜欢的点个赞哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C C...
    GrayLand阅读 1,595评论 1 10
  • 前言 Swift 贡献给社区 作者 关于中文翻译 条件语句 尤达表达式 nil 和 BOOL 检查 黄金大道 复杂...
    一条鱼的星辰大海阅读 353评论 0 1
  • 今天中秋,月圆人团圆,而爸妈昨天却出门了,为了生计,这么大年纪还在外奔波,实在不想说什么了,心酸。 上午勺同学打电...
    百香小趣阅读 839评论 0 50
  • 信心如暖阳,使人坚强温馨。 而信任,让人感动激情,胜过真金白银。 人与人之间,信任是第一位的。缺少了信任,一切都是...
    青山伴春风阅读 230评论 0 6
  • 今日体验:父母回家了感觉到不舍 心态不是太好 延伸转化努力的做好自己把自己的工作做到极致,尽快把父母接到身边 不在...
    AA京心达汽车维护中心阅读 123评论 0 0