首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Objective-C 在 main 函數中將字串傳遞給自定類別的正確姿勢

     編輯:程式設計綜合問答

問題現象

在 main.m 讀取字串 (如命令列參數),欲賦值給自定類別 CHBLetter 的屬性,但編譯報錯或執行無效果。

核心缺失:未建立類別實例

Objective-C 物件必須先 alloc/init 才能使用。僅宣告類別指標 CHBLetter *letter; 不會自動建立物件。

正確流程

#import 
#import "CHBLetter.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 1. 從參數或輸入取得字串
        NSString *inputStr = @"來自 main 的字串"; // 範例
        if (argc > 1) {
            inputStr = [NSString stringWithUTF8String:argv[1]];
        }

        // 2. 【關鍵】建立 CHBLetter 實例
        CHBLetter *letter = [[CHBLetter alloc] init]; 
        // 若有自定初始化方法:[[CHBLetter alloc] initWithString:inputStr];

        // 3. 設定屬性 (假設屬性名為 content)
        letter.content = inputStr; 
        // 或呼叫方法:[letter setContent:inputStr];

        // 4. 後續使用 letter...
        NSLog(@"Letter content: %@", letter.content);
    }
    return 0;
}

CHBLetter.h 定義範例

@interface CHBLetter : NSObject
@property (nonatomic, copy) NSString *content; // 建議 copy 修飾 NSString
- (instancetype)initWithString:(NSString *)str;
@end

常見坑點

  • 屬性未宣告 @property: 無法用點語法 letter.content = ...,需手寫 setter。
  • 未引入標頭檔: #import "CHBLetter.h"。
  • 記憶體管理: ARC 環境下無需手動 release,但 NSString 屬性建議用 copy 防止外部可變字串 (NSMutableString) 影響內部狀態。

總結:先 alloc/init 建立實例,再透過屬性或方法傳遞字串。

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