搜集知识iOS DeveloperiOS 开发

GeekBand - Objective-C学习笔记(一)

2016-07-27  本文已影响83人  varlarzh

前言

如何掌握高级编程语言

两种开发方式

类与对象

使用#import和#include的区别

类和对象

类型系统(不同的类型)

类class和结构体struct的区别

栈与堆的区别

内存管理的范围

引入栈和堆的概念

栈(stack)
堆(heap)
只有OC对象才需要进行内存管理的原因

stack 对象的优点主要有两点,一是创建速度快,二是管理简单,它有严格的生命周期。stack 对象的缺点是它不灵活。创建时长度是多大就一直是多 大,创建时是哪个函数创建的,它的owner 就一直是它。不像heap 对象那样有多个owner ,其实多个owner 等同于引用计数。只有 heap 对象才是采用“引用计数”方法管理它。

总结区别

两个运行内存图

对象的空间分析
值的空间分析

数据成员:属性与实例变量

类型成员

实例变量和属性的区别

属性认识

getter和setter方法

面向对象的语言一般都会有setter和getter器。在oc中一般这样写:
在.h中声明

-(void)setAge:(int)newAge;
-(int)age;

在.m文件中具体实现

-(void)setAge:(int)newAge {
    age = newAge;
}
-(int)age {
    return age;
}

属性重写setter和getter方法

-(void)setStr:(NSString *)str {
    _str = @"只重写setter方法";
}
@synthesize str = _str;
-(void)setStr:(NSString *)str {
    _str = @"同时重写setter和getter";
}
-(NSString *)str {
    return _str;
}

实例变量

属性的描述特性

参考这篇文章关于属性的特性总结:
1.OC属性总结笔记
2.OC 属性特性assign,retain

函数成员:方法

[array insertObject:foo atIndex:0];
objc_msgSend(array, @selector(insertObject:atIndex:), foo, 0);

runtime

实例方法和类型方法

方法参数

初始化器和析构器

认识初始化器和析构器

对象初始化器

指定初始化方法和便利构造器

指定初始化方法


- (id)initWithName:(NSString *)name
{
    //调用指定初始化方法
    return [self initWithName:name age:0 sex:'0' height:0];
}

//指定初始化方法
- (id)initWithName:(NSString *)name age:(NSInteger)age sex:(char)sex height:(CGFloat)height
{
    self = [super init];
    if (self) {
        _name = name;
        _age = age;
        _sex = sex;
        _height = height;
    }
    return self;
}

便利构造器

+(id)PersonWithName:(NSString *)name age:(NSInteger)age sex:(char)sex height:(CGFloat)height
{
    Person *p = [[Person alloc] initWithName:name age:age sex:sex height:height];
    return p;
}

类初始化器

对象析构器

继承与多态

认识面向对象

继承

运行时多态 polymorphism

继承中的init和dealloc

在我的博客中,点我

上一篇 下一篇

猜你喜欢

热点阅读