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

Objective-C 類聲明與實現基礎語法速查

     編輯:關於C語言

Objective-C 類結構核心語法

Objective-C 繼承自 C,通過 `@interface` 與 `@implementation` 分離聲明與實現,採用消息傳遞機制。本文梳理最基礎的類定義模式。

1. 類聲明

// MyClass.h
#import <Foundation/Foundation.h>

@interface MyClass : NSObject

// 屬性聲明(現代語法自動合成實例變量)
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;

// 實例方法聲明
- (void)round;                    // 無參無返回
- (NSString *)description;        // 有返回值
- (void)setName:(NSString *)newName age:(NSInteger)newAge;  // 多參數

// 類方法聲明
+ (instancetype)sharedInstance;   // 單例工廠方法

@end

2. 類實現

// MyClass.m
#import "MyClass.h"

@implementation MyClass

// 自動合成 _name, _age 實例變量
// @synthesize name = _name;  // 現代LLVM可省略

- (instancetype)init {
    self = [super init];
    if (self) {
        _name = @"Default";
        _age = 0;
    }
    return self;
}

- (void)round {
    NSLog(@"Round method called for %@", _name);
}

- (NSString *)description {
    return [NSString stringWithFormat:@"<%@: %p> name=%@, age=%ld", 
            [self class], self, _name, (long)_age];
}

- (void)setName:(NSString *)newName age:(NSInteger)newAge {
    _name = [newName copy];
    _age = newAge;
}

+ (instancetype)sharedInstance {
    static MyClass *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

@end

關鍵語法對照表

概念語法說明
實例方法- (ReturnType)methodName:(ParamType)paramName以 `-` 開頭,屬於對象實例
類方法+ (ReturnType)methodName:(ParamType)paramName以 `+` 開頭,屬於類對象,常用工廠方法
屬性屬性nonatomic, strong/weak/copy, assign線程安全性、內存管理語義
實例變量@property 自動生成 `_propertyName`現代運行時自動合成,無需手寫 `@synthesize`
初始化- (instancetype)init指定初始化器,返回 `instancetype` 支援子類

現代最佳實踐(Clang/LLVM 默認行為)

  • 屬性默認 `atomic`、`strong`(對象)、`assign`(標量)
  • 實例變量自動以下劃線前綴 `_propertyName`
  • 優先使用 `instancetype` 而非 `id` 作為初始化器返回類型
  • 採用 `NS_DESIGNATED_INITIALIZER` 標註指定初始化器
  • 使用 `#pragma mark -` 組織實現代碼區塊

常見陷阱

  1. 循環引用:`strong` 雙向引用導致內存洩漏 → 用 `weak` 打破
  2. 屬性與實例變量混淆:`self.name` 調用 setter/getter,`_name` 直接訪問內存
  3. 分類無法添加實例變量:只能用關聯對象 `objc_setAssociatedObject` 模擬

掌握這套聲明/實現分離模式,是閱讀 Cocoa/Cocoa Touch 框架源碼、編寫高質量 Objective-C 代碼的基石。Swift 雖已成主流,但大量存量代碼庫仍需 Objective-C 維護能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved