OC学习笔记-Objective-C概述和特点

Objective-C概述


Objective-C是一种面向对象的计算机语言,1980年代初布莱德.考斯特在其公司Stepstone发明Objective-C,该语言是基于SmallTalk-80。


1988年NeXT公司发布了OC,他的开发环境和类库叫NEXTSTEP, 1994年NExt与Sun公司发布了标准的NEXTSTEP系统,取名openStep。


1996年苹果公司开始支持Next,把nextstep/openstep用于Mac os X操作系统开发,他的版本和开发环境较做Cocoa,使用Objective-C作为基础语言,开发工具xcode和interface Builder。


2007年苹果公司推出Objective-C 2.0,Objective-C是MAC OS X和iOS的开发基础语言。


Objective-C特点


1兼容性

2字符串

3类

4方法

5.属性

6.协议和分类


1.兼容性

Objective-C是在C语言的基础上增加了一层最小的面向对象语法,OC完全兼容C语言,可以在OC代码中混入C语言代码,甚至是C++代码。


2.字符串

OBjective-C通常不使用C语言风格的字符串。大多数情况下是使用Foudation框架的NSString类型的字符串。NSString类提供了字符串的类包装,支持Unicode、Printf风格的格式化工具等。它是在普通的双引号字符串前防止一个@符号,如下面的例子所示。

NSString *my String = @"My String";

NSString *anotherString = [NSString stringWithFormat:@"%d %s",1,@"String"];


3.类

定义类是Objective-C的基本能力。Objective-C的类声明和实现包括两个部分:接口部分和实现部分。


4.方法

定义方法也是Objective-C的基本能力。Objective-C中方法不是采用"."运算符,而是"[]"运算符。有时候方法调用也称为消息发送。


5.属性

属性是Objective-C 2.0提出的概念,它是代替对成员变量访问的"读取方法(get)"和"设定方法(set)"的手段。为了对类进行封装,一般情况下不直接访问成员变量,而是通过属性访问。


6.协议和分类

协议

Objective-C中的协议类似于JAVA中的接口或C++的纯虚类(没学习过JAVA和C++,视频里面老师讲了,就先记录下来),只有接口部分定义没有实现部分,即只有h文件没有m文件。OC中协议也叫代理。自己本身不实现。由第三方谁要使用谁去实现。

分类

Objective-C中的分类是类似于继承机制的,通过分类能够扩展父类的功能。


OC文件扩展名

Objective-C代码的文件扩展名

由于在Objective-C中可以编写多种形式的源文件,因此可以通过不同的文件扩展名来区分。

文件扩展名说明:

.c C语言源程序文件

.cc或.cpp C++语言源程序文件

.h头文件

.m Objective-C源程序文件 代码包含有OC和C语句

.mm Objective-C++原程序文件 代码包含有OC和C++的语句

.o 编译之后的文件


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Objective-C 中,可以通过判断当前函数的符号类型来确定它是 C 函数还是 Objective-C 函数。 在 C 函数中使用的符号类型是普通的 C 函数符号,比如: ```c void myFunction(int arg1, float arg2); ``` 而在 Objective-C 函数中使用的符号类型是带有方法名和参数类型的 Objective-C 方法符号,比如: ```objc - (void)myMethod:(int)arg1 withArg2:(float)arg2; ``` 因此,我们可以通过查看当前函数的符号类型来确定它是 C 函数还是 Objective-C 函数。 在 Xcode 中,可以通过在调试器中查看符号类型来实现。打开调试器,找到具体的函数调用,然后在变量视图中查看函数符号类型即可。 在代码中,可以使用 C 函数 `__builtin_return_address` 来获取当前函数的返回地址,从而确定当前函数的符号类型。具体实现如下: ```c void *returnAddress = __builtin_return_address(0); Dl_info info; dladdr(returnAddress, &info); const char *symbolName = info.dli_sname; if (symbolName && symbolName[0] == '-') { // Objective-C 方法 } else { // C 函数 } ``` 在这个示例中,我们首先使用 `__builtin_return_address` 函数获取当前函数的返回地址,然后使用 `dladdr` 函数查找该地址所对应的符号信息。最后,我们根据符号名字的第一个字符是否为 `-` 来判断当前函数是 Objective-C 方法还是 C 函数。 需要注意的是,这种方法并不是完全可靠的,因为有些 C 函数可能会以 Objective-C 方法的形式被调用,或者有些 Objective-C 方法可能会被标记为 C 函数的形式。因此,建议在实际使用中根据具体情况进行判断,避免出现错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值