{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/objective-c-language-basics/",
  "atlas": "https://www.pystone.net/?node=objective-c-language-basics#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/objective-c-language-basics.md",
  "context": "https://www.pystone.net/notes/objective-c-language-basics.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:objective-c-language-basics",
  "slug": "objective-c-language-basics",
  "title": "Objective-C语言基础",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "Objective C语言基础 Objective C 是一种扩展了 C 语言的编程语言，增加了面向对象编程（OOP）特性。它结合了 C 语言的功能和 Smalltalk 的面向对象特性。以下是 Objective C 的一些主要特性及示例：",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "fa913905d8de9dccd9faa1d627bf2e995c635b8ab0f2795a1c81cfb69c7a2533",
  "assets": [],
  "headings": [
    {
      "depth": 1,
      "text": "Objective-C语言基础",
      "anchor": "objective-c语言基础",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#objective-c%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80"
    },
    {
      "depth": 3,
      "text": "主要特性",
      "anchor": "主要特性",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E4%B8%BB%E8%A6%81%E7%89%B9%E6%80%A7"
    },
    {
      "depth": 3,
      "text": "示例代码",
      "anchor": "示例代码",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81"
    },
    {
      "depth": 4,
      "text": "类和对象",
      "anchor": "类和对象",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E7%B1%BB%E5%92%8C%E5%AF%B9%E8%B1%A1"
    },
    {
      "depth": 4,
      "text": "消息传递",
      "anchor": "消息传递",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92"
    },
    {
      "depth": 4,
      "text": "动态类型和动态绑定",
      "anchor": "动态类型和动态绑定",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E5%8A%A8%E6%80%81%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%8A%A8%E6%80%81%E7%BB%91%E5%AE%9A"
    },
    {
      "depth": 4,
      "text": "协议",
      "anchor": "协议",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E5%8D%8F%E8%AE%AE"
    },
    {
      "depth": 4,
      "text": "分类（Category）",
      "anchor": "分类category",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E5%88%86%E7%B1%BBcategory"
    },
    {
      "depth": 3,
      "text": "Objective-C 和 C 的比较",
      "anchor": "objective-c-和-c-的比较",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#objective-c-%E5%92%8C-c-%E7%9A%84%E6%AF%94%E8%BE%83"
    },
    {
      "depth": 2,
      "text": "几种语言文件后缀",
      "anchor": "几种语言文件后缀",
      "citation": "https://www.pystone.net/notes/objective-c-language-basics/#%E5%87%A0%E7%A7%8D%E8%AF%AD%E8%A8%80%E6%96%87%E4%BB%B6%E5%90%8E%E7%BC%80"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:programming-languages-and-runtimes",
      "title": "编程语言与运行时",
      "url": "https://www.pystone.net/notes/programming-languages-and-runtimes/",
      "atlas": "https://www.pystone.net/?node=programming-languages-and-runtimes#knowledge-atlas",
      "label": "编程语言与运行时",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "本层中的“Objective-C语言基础”导航项",
      "citation": "https://www.pystone.net/notes/programming-languages-and-runtimes/#%E6%9C%AC%E5%B1%82"
    }
  ],
  "contentMarkdown": "# Objective-C语言基础\nObjective-C 是一种扩展了 C 语言的编程语言，增加了面向对象编程（OOP）特性。它结合了 C 语言的功能和 Smalltalk 的面向对象特性。以下是 Objective-C 的一些主要特性及示例：\n\n### 主要特性\n\n1. **类和对象**\n\n   * **类**：定义对象的模板，包括属性和方法。\n   * **对象**：类的实例，可以调用类的方法和访问类的属性。\n\n2. **消息传递**\n\n   * **消息传递**：Objective-C 中的方法调用使用消息传递机制，类似于 Smalltalk。\n\n3. **动态类型和动态绑定**\n\n   * **动态类型**：类型信息在运行时决定。\n   * **动态绑定**：方法的具体实现直到运行时才确定。\n\n4. **内存管理**\n\n   * **手动引用计数（MRC）**：通过 retain 和 release 管理内存。\n   * **自动引用计数（ARC）**：编译器自动插入内存管理代码。\n\n5. **协议**\n\n   * **协议**：定义一组方法，任何类都可以实现这些方法，类似于 Java 中的接口。\n\n6. **分类（Category）**\n\n   * **分类**：扩展现有类的功能而无需创建子类。\n\n### 示例代码\n\n#### 类和对象\n\n```objc\n#import <Foundation/Foundation.h>\n\n@interface Person : NSObject {\n    NSString *name;\n    int age;\n}\n\n- (void)setName:(NSString *)n;\n- (void)setAge:(int)a;\n- (void)printInfo;\n\n@end\n\n@implementation Person\n\n- (void)setName:(NSString *)n {\n    name = n;\n}\n\n- (void)setAge:(int)a {\n    age = a;\n}\n\n- (void)printInfo {\n    NSLog(@\"Name: %@, Age: %d\", name, age);\n}\n\n@end\n\nint main(int argc, const char * argv[]) {\n    @autoreleasepool {\n        Person *person = [[Person alloc] init];\n        [person setName:@\"John Doe\"];\n        [person setAge:30];\n        [person printInfo];\n    }\n    return 0;\n}\n```\n\n#### 消息传递\n\n```objc\n[object methodName];\n```\n\n在 Objective-C 中，方法调用被视为向对象发送消息。上面的例子中 `[person setName:@\"John Doe\"];` 就是向 `person` 对象发送 `setName:` 消息。\n\n#### 动态类型和动态绑定\n\n```objc\nid myObject = [[Person alloc] init];\n[myObject setName:@\"John Doe\"]; // 动态绑定，运行时决定调用哪个方法\n```\n\n`id` 是一种动态类型，可以在运行时决定具体类型和方法实现。\n\n#### 协议\n\n```objc\n@protocol MyProtocol <NSObject>\n- (void)doSomething;\n@end\n\n@interface MyClass : NSObject <MyProtocol>\n@end\n\n@implementation MyClass\n- (void)doSomething {\n    NSLog(@\"Doing something!\");\n}\n@end\n```\n\n#### 分类（Category）\n\n```objc\n@interface NSString (MyCategory)\n- (void)myMethod;\n@end\n\n@implementation NSString (MyCategory)\n- (void)myMethod {\n    NSLog(@\"MyCategory method called on %@\", self);\n}\n@end\n\nint main(int argc, const char * argv[]) {\n    @autoreleasepool {\n        NSString *str = @\"Hello, World!\";\n        [str myMethod]; // 调用分类方法\n    }\n    return 0;\n}\n```\n\n### Objective-C 和 C 的比较\n\n1. **面向对象支持**：\n\n   * Objective-C：支持面向对象编程，具有类、对象、继承、多态等特性。\n   * C：不支持面向对象编程，主要用于过程化编程。\n\n2. **消息传递**：\n\n   * Objective-C：方法调用使用消息传递机制，更加动态和灵活。\n   * C：函数调用是静态的，在编译时决定。\n\n3. **内存管理**：\n\n   * Objective-C：支持自动引用计数（ARC）和手动引用计数（MRC）。\n   * C：不提供内置的内存管理机制，需要手动管理内存。\n\n4. **协议和分类**：\n\n   * Objective-C：支持协议和分类，方便代码的扩展和模块化。\n   * C：没有类似的特性。\n\n通过以上的介绍和示例，展示了 Objective-C 的主要特性和与 C 语言的区别。Objective-C 在保留 C 语言高效和灵活的基础上，增加了面向对象编程的支持，使其在开发复杂应用时更加方便和高效。\n\n\n## 几种语言文件后缀\n\n\n1. **.h 文件**\n\n   * **含义**：头文件，包含函数、类、变量的声明。\n   * **用途**：用于声明接口，供多个源文件共享。\n\n2. **.c 文件**\n\n   * **含义**：C 语言源文件。\n   * **用途**：包含用 C 语言编写的代码。\n\n3. **.cpp 文件**\n\n   * **含义**：C++ 源文件。\n   * **用途**：包含用 C++ 语言编写的代码。\n   * **区别**：与 `.c` 文件相比，`.cpp` 文件支持 C++ 的所有特性，包括面向对象编程、模板等。\n\n4. **.cc 文件**\n\n   * **含义**：C++ 源文件，通常在某些项目中作为 `.cpp` 文件的替代后缀。\n   * **用途**：同样包含用 C++ 语言编写的代码。\n   * **区别**：在功能上与 `.cpp` 文件相同，只是文件命名的不同选择，具体选择通常取决于项目或团队的命名规范。\n\n5. **.mm 文件**\n\n   * **含义**：Objective-C++ 源文件。\n   * **用途**：包含用 Objective-C++ 语言编写的代码，这种语言是 Objective-C 和 C++ 的混合，允许在同一个文件中同时使用这两种语言的特性。\n   * **区别**：与 `.m` 文件（Objective-C 文件）不同，`.mm` 文件可以包含 C++ 代码。这对于需要同时使用 Objective-C 和 C++ 的项目非常有用，特别是在 macOS 和 iOS 开发中。\n"
}
