当前位置: 首页 > news >正文

Objective-C 构造方法的定义和声明规范

总目录 iOS开发笔记目录 从一无所知到入门

文章目录

    • 源码中 NSArray 的构造方法与命名规律
    • 自定义类的构造方法命名
      • 截图
      • 代码
      • 输出

源码中 NSArray 的构造方法与命名规律

在这里插入图片描述

@interface NSArray<ObjectType> (NSArrayCreation)+ (instancetype)array;
+ (instancetype)arrayWithObject:(ObjectType)anObject;
+ (instancetype)arrayWithObjects:(const ObjectType _Nonnull [_Nonnull])objects count:(NSUInteger)cnt;
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
+ (instancetype)arrayWithArray:(NSArray<ObjectType> *)array;- (instancetype)initWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
- (instancetype)initWithArray:(NSArray<ObjectType> *)array;
- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;/* Reads array stored in NSPropertyList format from the specified url. */
- (nullable NSArray<ObjectType> *)initWithContentsOfURL:(NSURL *)url error:(NSError **)error  API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
/* Reads array stored in NSPropertyList format from the specified url. */
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfURL:(NSURL *)url error:(NSError **)error API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)) NS_SWIFT_UNAVAILABLE("Use initializer instead");@end

可以看出,一个类型中,用于返回一个该类型对象的方法(不止是构造方法)的命名规律为以下(其中Xxx表示具体的类名):

  • 方法的返回值可以从 (Xxx *) 变成 (instancetype) ,其中instancetype在该类中表示该类的实例类型。加nullable表示方法的返回值可为空。
  • +开头的类方法的命名:xxx xxxWithArg1: arg2: arg3...
  • -开头的对象方法的命名:initWithArg1: arg2: arg3...

自定义类的构造方法命名

按照上述规律,自定义类,代码如下:

截图

Person类定义:
在这里插入图片描述
main方法调用部分:
在这里插入图片描述

代码

//
//  main.m
//  构造方法
//
//  Created by wuyujin1997 on 2023/2/23.
//#import <Foundation/Foundation.h>@interface Person : NSObject {@publicNSString* name;int age;
}
+ (instancetype) person;
+ (instancetype) personWithName:(NSString*)name age:(int)age;
- (instancetype) initWithName:(NSString*)name age:(int)age;
@end@implementation Person
+ (instancetype) person {return [Person new];
}
+ (instancetype) personWithName:(NSString*)name age:(int)age {Person* person = [Person new];person->name = name;person->age = age;return person;
}
- (instancetype) initWithName:(NSString*)name age:(int)age {self->name = name;self->age = age;return self;
}
// description方法用于改写打印本类对象时的输出内容格式,类似于 Java 中的 toString() 。
- (NSString *)description {return [NSString stringWithFormat:@"<%@:%p> name:%@ age:%d", [self class], self, self->name, self->age];
}
@endint main(int argc, const char * argv[]) {NSArray* arr1 = [NSArray new];NSArray* arr2 = [NSArray array];NSArray* arr3 = [NSArray arrayWithArray:arr1];Person* p1 = [Person new];Person* p2 = [Person person];Person* p3 = [Person personWithName:@"wuyujin1997" age:26];NSLog(@"%@", p1);NSLog(@"%@", p2);NSLog(@"%@", p3);[p1 initWithName:@"测试赋值" age:22];   // 已有对象,只是调用 initXxx 方法去做属性值的赋值/初始化而已。NSLog(@"%@", p1);return 0;
}

输出

2023-02-26 20:02:19.759434+0800 构造方法[29043:905161] <Person:0x6000002033a0> name:(null) age:0
2023-02-26 20:02:19.759661+0800 构造方法[29043:905161] <Person:0x600000203400> name:(null) age:0
2023-02-26 20:02:19.759684+0800 构造方法[29043:905161] <Person:0x600000203460> name:wuyujin1997 age:26
2023-02-26 20:02:19.759704+0800 构造方法[29043:905161] <Person:0x6000002033a0> name:测试赋值 age:22
Program ended with exit code: 0
http://www.lryc.cn/news/21714.html

相关文章:

  • Matlab图像处理学习笔记
  • 笔记(三)——迭代器的基础理论知识
  • 没有公网ip怎么外网访问nas?快解析内网端口映射到公网
  • spring integration使用:消息转换器
  • Vue3电商项目实战-商品详情模块7【21-商品详情-评价组件-头部渲染、22-商品详情-评价组件-实现列表】
  • 地址,指针,指针变量是什么?他们的区别?符号(*)在不同位置的解释?
  • 【MongoDB】一、MongoDB的安装与部署
  • 《爆肝整理》保姆级系列教程python接口自动化(二十三)--unittest断言——上(详解)
  • MySQL的mvcc
  • vite:常见的配置
  • 计算机图形学:liang算法和Cyrus-Beck算法
  • React组件之间的通信方式总结(上)
  • C++17 nodiscard标记符
  • SAP 寄售业务的标准流程
  • 操作系统高频知识
  • 加载预训练模型,模型微调,在自己的数据集上快速出效果
  • VScode远程连接服务器-过程试图写入的管道不存在-could not establist connection to【已解决】
  • 电子技术——B类输出阶
  • 【老卫搬砖】034期:HarmonyOS 3.1 Beta 1初体验,我在本地模拟器里面刷短视频
  • Day901.内部临时表 -MySQL实战
  • jstatd的启动方式与关闭方式
  • _improve-3
  • C++——异常
  • MVVM 架构进阶:MVI 架构详解
  • 有没有必要考PMP证书?
  • 1 机器学习基础
  • java基础系列(六) sleep()和wait() 区别
  • Urho3D序列化
  • 企业级信息系统开发学习1.3——利用注解配置取代Spring配置文件
  • VUE DIFF算法之快速DIFF