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

文章目录

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

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

@interface NSArray (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 *)array;

- (instancetype)initWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;

- (instancetype)initWithArray:(NSArray *)array;

- (instancetype)initWithArray:(NSArray *)array copyItems:(BOOL)flag;

/* Reads array stored in NSPropertyList format from the specified url. */

- (nullable NSArray *)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 *)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

@interface Person : NSObject {

@public

NSString* 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];

}

@end

int 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] name:(null) age:0

2023-02-26 20:02:19.759661+0800 构造方法[29043:905161] name:(null) age:0

2023-02-26 20:02:19.759684+0800 构造方法[29043:905161] name:wuyujin1997 age:26

2023-02-26 20:02:19.759704+0800 构造方法[29043:905161] name:测试赋值 age:22

Program ended with exit code: 0

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: