1.属性的内部实现原理:
assign
retain
copy
2.dealloc释放实例变量
dealloc 的方法 是为了setter方法里面 其实没有释放的实例变量
- (void)dealloc{
[_name release];
[_gender release];
[super dealloc];}
3.便利构造器方法
代码:
+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age
gender:(NSString *)gender{
Person *p = [[Person alloc]initWithName:name age:age gender:gender];
// [p release];// 写在上面再return,p变成了野指针
return [p autorelease];// BingGo正解 MRC
// [p release];// 写在下面,先return,内存泄漏}
4.collection内存管理
1⃣️:
Person *p1 = [[Person alloc]init];
NSMutableArray *mArr1 =[NSMutableArray array];
// 将对象加入容器中
[mArr1 addObject:p1];
// p1 会被retain
NSLog(@"%lu",[p1 retainCount]);
2⃣️:
// 将对象移除容器
[mArr1 removeObject:p1];
// p1 会被release
NSLog(@"%lu",[p1 retainCount]);
[p1 release];
p1 = nil;
5多态:父类指针可以指向子类对象
NSString *str = [[NSMutableString alloc]init];// 子类对象,父类指针可以指向
NSLog(@"%@",[str className]);
// 在编译时 NSString
// 在运行时 NSMutableSting
NSLog(@"%@",[str className]);
// 在编译时 NSString
// 在运行时 NSMutableSting
// NSCFString
🐷意:
( 1 ):
/* 与ARC相比多了.m中的
1⃣️:- (void)dealloc{
[_name release];
[_num release];
[super dealloc];}
和main.m中的
2⃣️:[s1 release];
[s2 release];
s1 = nil;
1⃣️:- (void)dealloc{
[_name release];
[_num release];
[super dealloc];}
和main.m中的
2⃣️:[s1 release];
[s2 release];
s1 = nil;
s2 = nil;*/
(2):
NSMutableString *ms = @"123".mutableCopy;