OC学习笔记--基础篇

发布时间:2023年12月21日

本文简要介绍了一些oc的基础类型,包括数组、字典、字符串、消息传递、类、对象、方法、属性、协议和转发,希望对你有帮助。

OC数据类型

在这里插入图片描述

打印—类似print

NSlog(@"hello word");

数组

NSMutableArray (可变数组)和 NSArray

NSArray *names = [[NSArray alloc] initWithObjects:@"frank", @"duck", @"monkey", nil];
NSArray *names = [NSArray arrayWithObjects:@"frank", @"duck", @"monkey", nil];
NSArray *names = @[@"frank", @"duck", @"monkey", @"cow"]

字典

NSMutableDictionary(可变字典)和NSDictionary

NSMutableDictionary *aMutableDictionary = [[NSMutableArray alloc]init];
NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:[self.dataMgr.preInvoiceModel toDictionary]];

消息传递

//其实就是调用方法
[obj method: argument];
//c++
obj.method(argument);

声明字符串

NSString* myString = @"My String\n";

封装

声明类

以关键字@interface作为开始,@end作为结束

@interface MyObject : NSObject {
    int memberVar1; // 实体变量
    id  memberVar2;
}

+(return_type) class_method; // 类方法

-(return_type) instance_method1; // 实例方法
-(return_type) instance_method2: (int) p1;
-(return_type) instance_method3: (int) p1 andPar: (int) p2;
@end

+/- 号代表函数类型:

“+” 代表类方法,不需要实例就可以调用,与C++ 的静态函数相似,这类方法是可以直接用类名来调用的

“-” 是一般的实例方法,必须使用这个类的实例才可以调用它

- (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue; /* 宣告方法*/
[myColor setColorToRed: 1.0 Green: 0.8 Blue: 0.2]; /* 呼叫方法*/

声明区域

implementation

@implementation MyObject {
  int memberVar3; //私有
}
+(return_type) class_method {
    .... //method implementation
}
-(return_type) instance_method1 {
     ....
}
-(return_type) instance_method3: (int) p1 andPar: (int) p2 {
    ....
}
@end

与Interface区别——访问权限:(看不懂可以看下图,清楚明白)

Interface区块内的实体变量默认权限为protected,implementation 区块的实体变量则默认为private。

在Implementation区块定义私有成员更匹配面向对象之封装原则,因为如此类别之私有信息就不需曝露于公开interface(.h文件)中。

封装权限:

  • @private(当前类访问权限):成员变量只能在当前类的内部访问。在类的实现部分定义的成员变量默认是@private。

  • @package(相同映像访问权限):如果类中的成员变量用@package访问控制符来限制,则这个成员变量可以在当前类以及当前类的同一个映像的任意地方访问

    所谓的统一映像指的是编译后生成的同一个框架或同一个执行文件,编译器可以将一些类编译成一个框架库,那么这个库中的类之间可以互相直接访问@package修饰的成员变量。

  • @protected(子类访问权限):如果类中的成员变量用@protected访问控制符来限制,则这个成员变量可以在当前类、当前类的子类的任意地方访问。在类的接口部分定义的成员变量默认是@protected

  • @public(公共访问权限):如果类中的成员变量用@public访问控制符来限制,则这个成员变量可以在任何地方进行访问

在这里插入图片描述

interface:声明类,implementation:定义类

创建对象

alloc:分配内存,init:初始化,若要自己定义初始化,可重写init方法(类似构造函数

MyObject * my = [[MyObject alloc] init];
//若创建对象不需要参数,则可直接使用new
MyObject * my = [MyObject new];

方法

方法声明:上面提过,主要是用加号和减号表示类方法和实例方法,后面跟着参数

方法调用:主要就是“[ ]”,[]之间可以嵌套

属性

基本的定义使用关键字@property编译选项,紧跟着类型信息和属性的名字

@property (nonatomic, strong) NSMutableArray *items;

不多说,直接看这篇博客:Objective-C属性(property)的特性(attribute)-腾讯云开发者社区-腾讯云

属性的特性:(经典永流传的图)

在这里插入图片描述

1.原子性(Atomicity

atomic(默认值)

nonatomic

  1. 存取特性(Access

readwrite(默认值)–读写

readonly–只读

3.内存管理特性(Storage

管理对象生命周期

strongweakassigncopy深拷贝

协议

@protocol作为区块起始,@end结束,中间为方法列表

@protocol Locking
- (void)lock;
- (void)unlock;
@end

注:类遵守协议的写法与swift也不一样

@interface SomeClass : SomeSuperClass <Locking>
@end

转发

Objective-C 入门教程 | 菜鸟教程

文章来源:https://blog.csdn.net/weixin_52259822/article/details/135135028
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。