首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C 入門筆記:BOOL、循環、字符串、文件操作與消息機制基礎

     編輯:關於C語言

Objective-C 在 C 基礎上增加了 Smalltalk 風格的消息傳遞、動態運行時、Foundation 框架。本文面向 C 開發者,快速建立 OC 基礎語法直覺:BOOL 陷阱、集合遍歷、NSString/文件操作、消息語法、核心術語。

1. BOOL 與布爾陷阱

#import <Foundation/Foundation.h>

// 正確:返回 BOOL 字面量
BOOL areIntsDifferent(int a, int b) {
    return (a == b) ? NO : YES;  // 不要 return a - b;
}

// 安全轉字符串
NSString *boolStr(BOOL b) {
    return b ? @"YES" : @"NO";
}

int main() {
    @autoreleasepool {
        NSLog(@"%@", boolStr(areIntsDifferent(6,6)));  // NO
        NSLog(@"%@", boolStr(areIntsDifferent(29,48))); // YES
    }
    return 0;
}

鐵律

  • 永不 if (flag == YES) — YES=1,但非零即真,flag=2 時判斷失敗。
  • 永遠 if (flag) / if (!flag) / if (flag == NO) (NO=0 唯一)。
  • BOOL 實為 signed char,非 _Bool。

2. 基礎循環與 NSLog

int main() {
    @autoreleasepool {
        int count = 3;
        NSLog(@"0 到 %d:", count);
        for (int i = 0; i <= count; ++i) {
            NSLog(@"%d", i);
        }
    }
    return 0;
}

3. C 字符串長度與 Foundation 字符串

int main() {
    @autoreleasepool {
        const char *c_arr[] = {@"hello", @"zhangting", @"latitude", @"longitude"};
        for (int i = 0; i < 4; ++i) {
            // C 風格
            NSLog(@"C: %s len=%lu", c_arr[i], strlen(c_arr[i]));
            // OC 風格 (UTF-16 代碼單元數)
            NSString *oc = [NSString stringWithUTF8String:c_arr[i]];
            NSLog(@"OC: %@ length=%lu", oc, [oc length]);
        }
    }
    return 0;
}

4. 文件讀取:C 標準庫 + NSString 互轉

int main() {
    @autoreleasepool {
        FILE *fp = fopen("/tmp/test.txt", "r");
        if (!fp) return 1;
        char line[256];
        while (fgets(line, sizeof(line), fp)) {
            // fgets 保留 \n,手動去除
            line[strcspn(line, "\n")] = '\0';
            NSString *oc = [NSString stringWithUTF8String:line];
            NSLog(@"%@ length=%lu", oc, [oc length]);
        }
        fclose(fp);
    }
    return 0;
}

5. 消息傳遞語法

// [receiver message]  →  objc_msgSend(receiver, @selector(message))
[array addObject:obj];           // 無參數
[dict setObject:obj forKey:key]; // 多參數 (冒號分隔)
[obj performSelector:@selector(foo)]; // 動態選擇器

6. 核心術語對照表

7. 編譯運行 (GNUstep/Clang)

# GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = MyTool
MyTool_OBJC_FILES = main.m
include $(GNUSTEP_MAKEFILES)/tool.make

# 編譯
$ make
# 運行
$ ./obj/MyTool

Objective-C 的靈魂是動態性:消息轉發、方法交換、KVC/KVO、協議遵守檢查皆在運行時完成。從 C 轉型 OC,關鍵心法轉變是:編譯期類型檢查 → 運行期契約信任。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
術語含義C++ 對應
消息方法調用的動態分發請求虛函數調用
方法響應消息的代碼實現 (IMP)成員函數
選擇器方法名的唯一標識 (SEL)函數指針/符號
協議方法列表契約 (@protocol)純虛類/Concept
類別運行時為現有類添加方法無直接對應
接口.h 文件聲明的公共 API頭文件類聲明
實現.m 文件的方法體.cpp 定義