码迷,mamicode.com
首页 > 其他好文 > 详细

Objective-C基础

时间:2015-11-02 10:19:16      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

1.C语言面向过程,OC面向对象

2.第一个OC程序

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

1)import引入头文件可以防止重复包含

2)Foundation/Foundation.h文件包含了很多头文件,引入这个等于把OC的库文件都引过来了

3)@autoreleasepool

4)NSLog与printf比较

NSLog自动换行,printf不会

NSLog会输出时间等项目信息,printf不会输出调试信息

NSLog函数的参数是一个NSString对象,printf是一个字符串常量指针

打印字符串用%@,NSString *Str1=@"ancc";NSLog(@"%@",str1);

3.@""代表字符串

4.文档注释

/**

*

**/

5.增强型for循环

6.类的定义

//
//  main.m
//  OC1
//
//  Created by fanyafang on 15/10/30.
//  Copyright © 2015年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

#pragma mark Person类
@interface Person : NSObject
{
    @public
    int _age;
    NSString *_name;
}
    -(void)getAge;

@end


@implementation Person
    -(void)getAge{
        NSLog(@"dddd");
    }
@end

#pragma mark 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
Person *p=[Person new]; p->_age=10; NSLog(@"%d",p->_age);

      [p getAge];

    }
    return 0;
}

7.内存的理解

代码区:存放类定义,加载一次

堆区:存放事例变量,保存了代码区类的地址

栈区:存放对象

8.NSString的用法:

1)创建字符串的方法

NSString *asstring=@"This is a String!";

NSString *s=[NSString new];

NSString *imgName=[NSString stringWithFormat:@"xxxxxxxx%02d.jpg",i];//格式化创建字符串

NSString *s2=[[NSString alloc] initwithString:s1];//用一个已经存在的字符串创建一个新的字符串

2)输出一个字符串

NSLog(@"%@",asstring);

3)字符串长度计算方法

C语言中用strlen函数

OC中用NSUInterger len=[s1 length];//NSUInterger无符号长整型

1个汉子按1个长度计算

9.OC的多文件开发

头文件和类实现文件分开编写,用import包含

10.类方法的学习

11.匿名类

使用匿名类调用类方法:[[Car new] stop];

[Car new]等价于[[Car alloc]init]

匿名类的优点:可以简化代码,方便方法的调用;缺点:匿名对象实例化后只能正确的使用成员变量一次。

 12.get-set方法的编写

13.对象之间的关系:

组合(葡萄) 依赖(一个对象的方法参数是另一个对象) 关联(拥有,一个类的成员是另一个类的对象)

13.OC中没有重载,类的方法不能同名

14.static的用法

1)在方法中延长变量的生命周期

2)在实现类中定义;在接口类中定义,只在让前文件中有效

15.self的使用

1)对象方法中,调用另一个对象方法

2)在类方法中,调用另一个类方法

3)修饰变量-在set方法中,形参与实例变量名称相等,用self取实例变量

16.继承

1)不能和父类定义一样的变量

2)单一继承,不支持继承多个类

3)支持多层继承子类也可以被继承

17.事例变量修饰符

public:公开的,在其他类中也可以访问

protected:受保护的类型,只能在当前类和子类中访问

private:不能直接访问

.h文件中没有声明的变量和方法,只在.m文件中定义,不能被继承和使用

18.%@打印对象的地址,默认调用对象的description方法,可以重写此方法

19.多态:不同的对象以自己的方式响应相同名称方法的能力称为多态

父类指针指向子类的对象

20.类的本质是类对象

1)Class c1=[d class];Class c1=[d1 class];如果d和d1是同一个类的对象,那个c1和c2指向相同的地址

2)获取方式,通过事例对象获取Class c1=[d class];,通过类名获取Class c1=[Dog class]; 

3)类对象的使用,代替类名new对象

21.SEL s1=@selector(test)//手动把test方法包装成sel类型

[p performSelector:s1];//向test方法发送sel消息,这两句话相当于[p test];

22.点语法的本质是调用getter、setter方法,不是访问成员变量

对象.属性=...;//替换为set方法

...=对象.属性;//替换为get方法

23.@property的使用

写在声明文件中,相当于定义get、set方法声明

#import <Foundation/Foundation.h>

@interface Animal : NSObject
{
    int _age;
}

@property int age;

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

@end

24.@synthesize的使用

写在实现文件中相当于注释部分的代码

#import "Animal.h"

@implementation Animal

@synthesize age;

//-(void)setAge:(int)age{
//    self->age=age;//@synthesize age会自动新建一个age实例变量
//}
//-(int)age{
//    return self->age;
//}

@end

@synthesize age=_age;//指定事例变量名,不会操作默认的变量

相当于:

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

xcode4.4之后,可以只使用@property而不使用@systhesize,并且不用定义带有下划线的变量

操作的是带有下划线的事例变量,如果当前类没有下划线的事例变量,则系统会帮我们生成。注意该变量是私有的(相对的,隐藏的)子类看不到

@property的增强型,在.m文件中重写get、set方法,但是不能同时重写,只能重写一个

25.动态类型和静态类型

动态类型:父类的指针指向子类的对象

静态类型:

26.id的使用,id是一个万能指针,可以指向任何对象

NSObject和id都可以指向任何对象

NSObject对象会进行编译时检查(需要强制类型转换)

id不需要强制类型转换,id可以直接用

编译器看到id以后,认为是动态类型,不在检查

id obj=[Animal new];

27:动态绑定

内省

动态类型检测:

1)判断类型

1))判断某个对象是否是类的实例对象,或者子类的事例对象

BOOL isKind = [ani isKindOfClass:[Animal class]];(对象和类)

2))判断是否是这个类的事例,不管是否是这个类的子类的事例

isMemberOf(对象和类)

3))判断是否是子类的事例

isSubClassOfClass

BOOL isKind = [Dog isSubClassOfClass:[Animal class]];(类和类)

 2)方法响应的检测

1))判断对象能否响应指定的方法:

respondsToSelector:方法的SEL

2))判断类能否响应指定的方法

instanceResponseToSelector:方法的SEL

3)响应方法

无参:performSelector:SEL

有一个参数:performSelector:SEL withObject:@"参数"

 有两个参数:performSelector:SEL withObject:@"参数" withObject:@"参数2"

28.构造方法init,是一个对象方法,返回的是一个对象-调用init方法的对象

29.重写构造方法

-(instancetype)init{
    self = [super init];
    if(self){
        _age=10;
    }
    return self;
}

 

Objective-C基础

标签:

原文地址:http://www.cnblogs.com/fanglove/p/4922882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!