第一章 OC之单例模式
第二章 OC之初始化
第三章 OC之类和协议
第四章 OC之main函数的一些操作和基础概念
浅谈初始化方法及初始化方法的重写
我们在创建一个对象后,为其属性赋值就叫对象初始化
[[类名 alloc]init]
[类名 new]
这两种方法本质完全相同。
整形变量重置为0,浮点型对象重置为0.0。BOOL类型重置为NO。
仅仅分配了内存的对象还不能使用,必须进行初始化,OC最常用的初始化方法是init。
init方法虽然可以完成初始化,但是它只是完成最基本的初始化,因此,对象的所有成员变量依然为0
我们来看看如果不初始化会出现怎样的结果:
类的接口:
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface User : NSObject
@property(nonatomic,copy) NSString*name;
@property(nonatomic,assign) int age;
@end
NS_ASSUME_NONNULL_END
类的实现:
在这里插入代码片#import "User.h"
@implementation User
@synthesize name;
@synthesize age;
@end;
测试:
#import"User.h"
#import<Foundation/Foundation.h>
int main() {
@autoreleasepool {
User* user = [[User alloc]init];
NSLog(@"user.name = %@,user.age = %d", user.name, user.age);
}
}
类的接口和实现部分都和上边相同,给出测试部分:
#import"User.h"
#import<Foundation/Foundation.h>
int main(){
@autoreleasepool {
User* user = [[User alloc]init];
user.name = @"娜娜";
user.age = 18;
NSLog(@"user.name = %@,user.age = %d", user.name, user.age);
}
}
类的接口:
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface User : NSObject
@property(nonatomic,copy) NSString*name;
@property(nonatomic,assign) int age;
@end
NS_ASSUME_NONNULL_END
类的实现:
#import "User.h"
@implementation User
@synthesize name;
@synthesize age;
-(id)init{
if(self = [super init]){
self.name = @"wang";
self.age = 18;
}
return self;
}
@end
测试部分:
#import"User.h"
#import<Foundation/Foundation.h>
int main(){
@autoreleasepool {
User* user = [[User alloc]init];
NSLog(@"user.name = %@,user.age = %d", user.name, user.age);
User* m = [[User alloc]init];
NSLog(@"m.name = %@,m.age = %d", user.name, user.age);
}
}
结果:
我们发现,这两个对象在调用init方法时,会自动为对象赋值。因为我们重写了init方法,我们这里使用的init方法不在是NSObject提供的,而是我们重写的。在我们调用被重写的init方法后,会自动给对象赋值。