OC基础语法(与Swift对比)-1

OC分头文件.h和.m文件,业务逻辑基本都写在.m里面。

1.类的声明,修饰符

objectivec 复制代码
@interface  Developer : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSArray *skills;
//声明了几个变量copy修饰不可变变量,assign是弱引用,修饰C语言的基础类型

- (instancetype)initWithName: (NSString *)name age:(NSInteger)age;
- (void)printProfile;

@end

OC的所有类都要继承NSObject,如@interface Developer : NSObject

OC的四种修饰方式

1.assign

assign与weak都是弱引用。assign一般用于修饰非对象类型,如INT,数字等。

2.strong

return和strong都是强引用。

strong是用于自动释放的(苹果为你管理内存时)、

3.weak

assign与weak都是弱引用。weak修饰的是对象类型,防止其循环引用,比如需要调用delegate的时候,还有就是避免循环引用的时候。

4.retain

手动管理内存时使用。手动释放的时候使用retain,这个是在MRC时代用的(非常古早,现在已经都是ARC了)。

retain与release用于管理内存

5.copy

用copy修饰NSArray就代表数组是不可变的(一定要)。仅用于NSArray

如果说是NSMutableArray,就是使用strong,这代表一个数组是可变的。


例-NSArray用什么修饰?

用copy修饰NSArray就代表数组是不可变的。

类的具体实现

OC需要这样写类

//OC 里手写任何初始化方法,都遵循三步走原则。

//1.self = super init;调用父类的初始化方法

//2.if (self) {...}判断是否获得初始化方法

//3._name = name; 给底层真实存在的成员变量赋值。

//只要写 @implementation,就必须在最后加上 @end 来收尾(示例里略过了@end),就像一对大括号。它们中间包裹的就是所有的函数具体代码。

//第三部分:在控制器里运行测试 (相当于你的主程序入口)

objectivec 复制代码
@implementation Developer

- (instancetype)initWithName:(NSString *)name age:(NSInteger)age {
    self = [super init];
    if (self) {
        _name = name;
        _age = age;
        _skills = @[];
    }
    return  self;
}

函数(方法)

上面创建了一个函数,这里写具体内容。

objectivec 复制代码
-(void)printProfile {
    NSLog(@"开发者: %@, 年龄: %ld, 当前技能树: ", self.name, (long)self.age);
    for (NSString *skill in self.skills) {
        NSLog(@"👉 %@", skill);
    }
}

在控制器里运行测试 (相当于主程序入口)

objectivec 复制代码
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
//    实例化对象
    Developer *dev = [[Developer alloc] initWithName:@"iOS" age:23];
//     OC 必须先 alloc (分配内存),再 init (初始化)
//    相当于 Swift: let dev = Developer(name: "iOS", age: 23)
    dev.skills = @[@"SwiftUI", @"UIKit", @"Objective-C"];
// 相当于 Swift: dev.skills = ["SwiftUI", "UIKit", "Objective-C"]
// OC 的字符串必须带 @,数组字面量必须用 @[...]
    dev.age = 24;
// 修改属性
    [dev printProfile];
// 调用方法 相当于 Swift: dev.printProfile()
}

@end
相关推荐
也非非也1 分钟前
iPhone 中国区 AI 落地:Apple 与阿里千问合作的技术观察
大数据·人工智能·ios·agent·iphone·智子
幻境如梦丶皆为虚24 分钟前
从零写一个 DSH 插件:在左侧菜单栏加一个「测试」
开发语言·javascript·ecmascript
LabVIEW开发39 分钟前
LabVIEW 局部变量与数据流:这道 CLAD 题为什么答案是 Undefined
java·开发语言·labview
路溪非溪42 分钟前
C++标准库之智能指针
linux·开发语言·c++
茶底世界之下1 小时前
同一片泳池,清透还是奶油胶片?用 Awaking 做两版成片
ios
衍生星球1 小时前
【Java 语言】— 面向对象:构造方法(无参、有参构造)
java·开发语言
yuniko-n1 小时前
【JVM】对象内存布局
java·开发语言·jvm
何中应2 小时前
【Go-1】变量&常量定义
开发语言·后端·golang
CarIise2 小时前
Spring 框架AOP与 XML 基础
java·开发语言