c和oc小知识

1.const

const 修饰了*p1 / *p2

const int * p1=&age;

int const * p2=&age;//和上面的意义一样 ,换句话说就是 在 “ * ”一侧的话是一样的作用

如:

int num=15;

p1=#

p2=#//都可以变 从age地址变成了Num地址

*p1=30;

*p2=30;//报错,内容不可变!

int * const p3=&age;//和上面不一样了

const 离p3近说白了这个p3指针是个常量不能被修改了 所以, 下面会报错

如:

int num=25;

p3=#//报错

*p3=30;//age 就变成30了

2.const 和 #define宏的区别

宏是在编译前直接替换

const修饰的是变量

所以如果代码中宏很多 那么效率要低于const

#denfie AGE 20

int const AGE=20;

{

nslog(@“%@”,AGE);

nslog(@“%@”,AGE);

nslog(@“%@”,AGE);

nslog(@“%@”,AGE);

//如果是宏定义那么效率是4个内存 但是如果是变量那么只有一个内存

}

引申:那么可以搞个const.h 和const.m 专门用来管理字符串常量。

2.oc申明变量的区别

方式一:直接在@interface中的大括号中声明。

@interface MyTest : NSObject{

NSString *mystr;

}

方式二:直接用@property声明

@interface MyTest : NSObject{

@property (strong, nonatomic) NSString *mystr;

}

使用方式一声明的成员变量是只能在自己类内部直接使用,不能在类的外部使用,而且无法通过 “类名. 点”的方式显示。

方式二则相反,它可以在类的外部访问(声明在.h文件中可以.m也不可以访问),在类的内部可以通过下划线"_变量名”或者"self.变量名"的方式来访问。

3.id<XXX> object; 表示 object 是一个遵守xxx协议的指针。或者说只要遵守了xxx协议的指针就可以赋值给object了。

4..Object<Type> xcode7之后新增了泛型了,就是对摸个数组,字典,或者自定义模型里面的内容的类型进行限定。

5.数组和指针

5.1 数组名代表,指向这个数组的第一个元素的指针

比如: int numbers[2][2]={
                            {10,20},
                            {11,21}

};

那么  numbers[0]:指向numbers[0][0];

number[1]:指向numbers[1][0]

numbers :指向numbers[0]

5.2,指针的移动的大小与指向内容的大小是一致的 numbers+1=&numbers+1*sizeof(numbers)

如 :

&numbers[0][0]+1,移动4个字节=numbers[0]+1

&numbers[0]+1,移动8个字节=numbers+1

&numbers+1,移动16个字节

NSLog(@"%ld,%p,%p", sizeof(&numbers),&numbers,&numbers+1);

NSLog(@"%ld,%p,%p", sizeof(&numbers[0]),&numbers[0],&numbers[0]+1);

NSLog(@"%ld,%p,%p", sizeof(numbers),numbers,numbers+1);

NSLog(@"%ld,%p,%p", sizeof(&numbers[0][0]),&numbers[0][0],&numbers[0][0]+1);

NSLog(@"%ld,%p,%p", sizeof(numbers[0]),numbers[0],numbers[0]+1);

2016-07-28 06:32:16.853 数组和指针[2715:178450] 8,0x7fff5fbff7c0,0x7fff5fbff7d0
2016-07-28 06:32:16.855
数组和指针[2715:178450] 8,0x7fff5fbff7c0,0x7fff5fbff7c8
2016-07-28 06:32:16.855
数组和指针[2715:178450] 16,0x7fff5fbff7c0,0x7fff5fbff7c8
2016-07-28 06:32:16.855
数组和指针[2715:178450] 8,0x7fff5fbff7c0,0x7fff5fbff7c4

2016-07-28 06:32:16.855 数组和指针[2715:178450] 8,0x7fff5fbff7c0,0x7fff5fbff7c4

时间: 2024-08-27 03:14:09

c和oc小知识的相关文章

iOS开发之oc(八)--小知识补充 init方法补充

小知识补充 一. id 1. 简介 万能指针,能指向任何OC对象,相当于NSObject * id类型的定义 typedef struct objc_object { Class isa; } *id; 2. 使用 // 注意:id后面不要加上* id p = [Person new]; 3. 局限性 调用一个不存在的方法,编译器会马上报错 二. .h和.m文件的抽取 1)每个类分布在不同文件中 2)类的声明放在.h文件,类的实现放在.m文件 3)若想使用某个类,就包含某个类的.h声明文件 三.

iOS 小知识-tips

--->1<--- arc的项目中使用非arc代码,则添加-fno-objc-arc: 非arc项目中使用arc代码,则添加-fobjc-arc. --->2<--- 实用的类 NSKeyedArchiver [UIScreen mainScreen] [UIDevice currentDevice] [UIFont familyNames] [UIApplication sharedApplication] [NSUserDefaults standardUserDefaults

Linux 小知识翻译 - 「syslog」

这次聊聊「syslog」. 上次聊了「日志」(lgo).这次说起syslog,一看到log(日志)就明白是怎么回事了.syslog是获取系统日志的工具. 很多UINIX系的OS都采用了这个程序,它承担了「获取系统全部的日志」这个维持系统正常运行的重要任务. syslog的本体是「syslogd」这个daemon(一般翻译成守护进程),常驻内存中获取日志. syslog的特点是可以通过配置文件「/etc/syslog.conf」,对「哪种应用程序?哪种重要度的信息?记录在哪个文件中?」等进行细致的

Linux 小知识翻译 - 「日志」(log)

这次聊聊「日志」. 「日志」主要指系统或者软件留下的「记录」.出自表示「航海日志」的「logbook」. 经常听说「出现问题的时候,或者程序没有安装自己预期的来运行的时候,请看看日志!」. 确实,记录了系统和软件详细运行情况的「日志」是信息的宝库,通过日志来解决问题的事例也非常多. 但事实上,「无论如何也不会看日志」的用户也有很多.理由很简单,日志的信息量非常大,全部用眼睛来看的话是非常吃力的. 而且,英语写的日志也会让英文不好的人敬而远之. 虽说「要养成用眼睛来看日志的习惯」,但实行起来却非常

Linux 小知识翻译 - 「编译器和解释器」

这次聊聊「编译器和解释器」. 编程语言中,有以C为代表的编译型语言和以Perl为代表的解释型语言.不管是哪种,程序都是以人类能够理解的形式记录的,这种形式计算机是无法理解的. 因此,才会有编译器和解释器. 对于编译型语言,是使用编译器将人类可读的代码转换为机器能够理解的「机器语言」文件,然后通过执行这个「机器语言」文件来实现程序的执行. 另一方面,对于解释型语言,是使用解释器将人类可读的代码逐行解释,一边解释一边执行这个程序.(这里的解释是将代码解释成机器语言,让计算机能够理解) 甚至有的语言既

Linux 小知识翻译 - 「补丁」(patch)

这次,聊聊补丁. 当有bug或者安全漏洞的时候,就会发布补丁.打上补丁之后,就能解决相应的bug或者安全漏洞. 那么,「补丁」到底是什么呢? 「补丁」只有少量的代码,一般都是对程序的一部分进行更新或者追加,包括bug修正,安全漏洞修正,功能追加或者变更等等.当然,只有「补丁」是无法运行的. 即,只有将「补丁」附加到原来的程序中,更新原来的程序后,才能运行. 「补丁(patch)」本来是指「打补丁用的小布头」.「patch」正是为了补足现有的程序,堵住程序漏洞的「布头」. 打「补丁」的时候需要用到

Linux 小知识翻译 - 「协议(protocol)」

对于理解服务器和网络来说,「协议」是不可缺少的概念. 「协议(protocol)」有「规则,规定」的意思. 实际上「协议」的函数很广,在通信领域,「协议」规定了「在通信时,什么样的情况下,以什么样的顺序,什么样的方式交互什么样的数据」. 抽象的去理解「协议」可能会比较困难,下面来举个例子. 通过Web以HTML方式交互时使用的协议是「HTTP」(Hyper Text Transfer Protocol).这个协议最重要的就是规定了服务器和客户端之间以HTML方式交互的规则. 比如,客户端连接上服

Linux 小知识翻译 - 「Linux」怎么读?

主要讨论日语中的读法,所以没有完全按照原文来翻译. 「linux」的读法有很多(这里指在日语中),代表性的读法有以下几种: A). 李纳苦思 B). 李奴苦思 C). 纳依纳苦思 A和B相同的是将 linux开头的「li」发音成「李」.这也是linux之父Linus Torvalds的名字的日语假名(「リーナス?トーバルズ」)的由来. linux中「nu」的发音是怎么样的呢?Linux Online的网页上有说明,而且视频中还有 Linus Torvalds 的发音. http://www.li

Android 48个小知识

1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 2.TextView部分文字设置颜色 TextView tv = new TextView(this); //添加css样式 tv.setText(Html.fromHtml("<font color="#ff0000">红色<