手把手教你定义 Objective-C 类:属性、方法与初始化器的规范写法
·
手把手教你定义 Objective-C 类
1. 创建类接口文件 (.h)
定义类的公开属性和方法声明,使用@interface关键字:
// Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
// 属性声明规范
@property (nonatomic, copy) NSString *name; // 字符串用copy
@property (nonatomic, assign) NSInteger age; // 基础类型用assign
@property (nonatomic, strong) NSArray *skills; // 对象类型用strong
// 方法声明规范
- (void)introduceSelf; // 实例方法
+ (void)speciesInfo; // 类方法
// 初始化器规范
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age;
@end
2. 创建类实现文件 (.m)
实现具体逻辑,使用@implementation关键字:
// Person.m
#import "Person.h"
@implementation Person
// MARK: - 初始化器实现
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age {
self = [super init]; // 必须调用父类初始化
if (self) {
_name = [name copy]; // 直接访问实例变量
_age = age;
_skills = @[@"Objective-C", @"Swift"];
}
return self;
}
// 默认初始化器重写
- (instancetype)init {
return [self initWithName:@"Unknown" age:0]; // 复用指定初始化器
}
// MARK: - 方法实现
- (void)introduceSelf {
NSLog(@"我叫%@, 今年%ld岁", self.name, (long)self.age);
}
+ (void)speciesInfo {
NSLog(@"人类");
}
// MARK: - 内存管理
- (void)dealloc {
// 清理资源(ARC环境下通常无需实现)
}
@end
3. 关键规范说明
-
属性特性选择:
copy:字符串/可变对象(防止外部修改)strong:对象类型(默认所有权)assign:基础类型(int/float等)weak:避免循环引用(如delegate)
-
初始化器规范:
- 主初始化器需完整参数:
initWithName:age: - 次要初始化器调用主初始化器(如
init) - 必须检查
if (self)后才赋值
- 主初始化器需完整参数:
-
方法命名规范:
- 实例方法:
- (返回值类型)方法名 - 类方法:
+ (返回值类型)方法名 - 参数格式:
(类型)参数名
- 实例方法:
-
实例变量访问:
- 初始化器内使用
_name直接访问 - 其他方法使用
self.name(触发属性特性)
- 初始化器内使用
4. 使用示例
// 创建实例
Person *developer = [[Person alloc] initWithName:@"张三" age:28];
// 访问属性
developer.skills = @[@"iOS开发", @"性能优化"];
// 调用方法
[developer introduceSelf]; // 输出:我叫张三, 今年28岁
[Person speciesInfo]; // 输出:人类
最佳实践:
- 所有属性明确定义非原子性(
nonatomic)- 避免在初始化器内调用方法(对象未完全初始化)
- 自定义类前缀(如
XYZPerson)避免命名冲突- 使用
instancetype代替id确保类型安全
更多推荐

所有评论(0)