Lesson 0-1 Objective-C basic

2019-08-07  本文已影响0人  快乐捣蛋鬼

6.OC 手动内存管理

OC 内存管理原则:

// Person.m

#import "Person.h"

@implementation Person

-(void)dealloc
{
    [super dealloc];
}

// 内存管理实例方法
-(void)work
{
    NSLog(@"%@在工作", _name);
}


@end


#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    
    
    // 实例化 Person

    Person *person = [Person new];
    [person work];
    
    [person release];  // Attention: release
    
    
}

@end

通过打印NSLog(@"%lu", person.retainCount)可以知道是否被销毁(0/1)
每当出现 alloc, new, copy, mutableCopy, retain就会导致引用+1,就要用release或者autorelease-1

访问僵尸对象
zombieObject检测
不用看了,因为下面有自动内存管理哈

7.OC 自动内存管理

// Person.h
-(void)dealloc
{
    [super dealloc];
}

8.OC 的set和get方法

用属性生成器生成的不需要set和get方法,会自动生成set和get方法。

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface Person : NSObject
// 声明 3 个属性,用属性生成器生成的不需要set和get方法,会自动生成set和get方法。
@property(nonatomic, strong)NSString *name;
@property(nonatomic, assign)NSUInteger age;
@property(nonatomic, strong)NSString *gender;

// 声明 3 个 set 方法
-(void)setName:(NSString * _Nonnull)name;
-(void)setAge:(NSUInteger)age;
-(void)setGender:(NSString * _Nonnull)gender;

// 声明 3 个 get 方法
-(NSString *)name;
-(NSUInteger)age;
-(NSString *)gender;


@end

NS_ASSUME_NONNULL_END

// Person.m
#import "Person.h"

@implementation Person


// 实现 3 个 set 方法
- (void)setName:(NSString *)name
{
    self.name = name;
    
}

-(void)setAge:(NSUInteger)age
{
    self.age = age;
}

-(void)setGender:(NSString *)gender
{
    self.gender = gender;
}

// 实现 3 个 get 方法
- (NSString *)name
{
    return _name;
}
- (NSUInteger)age
{
    return _age;
}
-(NSString *)gender
{
    return _gender;
}


// 为了打印更多的信息,重写description
-(NSString *)description
{
    return [NSString stringWithFormat:@"name = %@, age = %zd, gender = %@", _name, _age, _gender];
}
@end

9.OC点语法

方便完成赋值和取值操作

[person setName:@"Tom"];
person.name = @"Tim";                         

10.属性约束

// example
@property (nonatomic, strong) NSString *name; // NSObject对象需要strong/weak
@property (nonatomic, assign) NSUInteger age; // 基本数值类型用assign

上一篇下一篇

猜你喜欢

热点阅读