当前位置:网站首页>对象初始化
对象初始化
2022-07-25 09:21:00 【山河丘壑】
系列文章目录
第一章 OC之单例模式
第二章 OC之初始化
第三章 OC之类和协议
第四章 OC之main函数的一些操作和基础概念
前言
浅谈初始化方法及初始化方法的重写
一、对象初始化?
- 什么是对象初始化?
我们在创建一个对象后,为其属性赋值就叫对象初始化
- 为对象分配空间:
[[类名 alloc]init]
[类名 new]
这两种方法本质完全相同。
- 将每个实例变量的内存空间都重置为0;
整形变量重置为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方法后,会自动给对象赋值。
边栏推荐
猜你喜欢
随机推荐
【代码源】每日一题 简单字段和
[De1CTF 2019]SSRF Me
那天帮妹纸装了个数据库。。。就又帮她整理了篇快捷键
Jar包在阿里云服务器起起来了,安全组也开通了,但postman仍跑不通怎么办
~2 ccf 2022-03-1 未初始化警告
Jspdf generates PDF files. There is a problem of incomplete files. Files are downloaded in the background, but not in the foreground
UI——无限轮播图和分栏控制器
*6-3 节约小能手
Data query language (DQL)
idea实用tips---如今将pom.xml(红色)改为pom.xml(蓝色)
OverTheWire-Bandit
Idea practical tips --- now change pom.xml (red) to pom.xml (blue)
@1-1 CCF 2021-04-1 灰度直方图
~1 ccf 2022-06-2 寻宝!大冒险!
idea 热部署
C language and SQL Server database technology
Dynamically add multiple tabs and initialize each tab page
Basic network knowledge
[HCTF 2018]admin
什么是脑裂问题?

![[GKCTF 2021]easynode](/img/f0/1daf6f83fea66fdefd55608cbddac6.png)







