无线互联IOS视频教程-学习笔记(一)

面向对象的三大特性:封装、继承、多态。                           

OC变量和基本数据类型

1.OC里面实例变量不能赋初值。局部变量最好初始化。

2.float 有效数字为6~7位。%f。double 有效数字为15~16位。%e %f %g。

3.逻辑型Boolean true或false,也可以是0或非0。

4.id类型是OC中独有的数据类型,它可以存储任何类型的对象,从某种意义上说,它就是一般的对象类型。将number声明为id类型的变量。如:idnumber;

格式说明符:%p。

基本数据类型转换

默认转换。原则:容量小的转换为容量大的数据类型。

数据类型按容量大小排序为:

Byte,short,char(不会互相转换,他们三者在计算时首先会转换成int类型)>int>long>float>double

强制转换。原则:容量大的转换为容量小的数据类型。加上强制转换符,但可能造成精度降低。

OC运算符和表达式

注意:++(--)在前时先运算再取值;在后时先取值再运算。

:逻辑非  &:逻辑与  |:逻辑或  ^:逻辑异或  &&:短路与(c语言中&&是一种双目运算符,表示与运算,而当左边所给表达式或变量为0时,不再计算右侧,整个表达式为零。) ||:短路或


if条件和for循环语句

求闰年的编程方法:((year % 4 ==0 && year % 100 !=0)||(year% 400 == 0))

Printf和NSlog的区别:(源于网络)

1.最本质的区别在于NSLog输出的日志,在debug下面,NSLog的输出会被写到system.log,而printf是不具备日志属性的。

2.NSLog会自己加上换行符,不需要自己添加换行符,printf需要手动添加\n。

3.NSLog会自动加上时间和进程信息,而printf仅将输入的内容输出不会添加任何额外的东西。

4.输入类型有区别:NSLog期待NSString*,而printf期待constchar *。

5.NSLog支持%@去打印一个对象类型,但printf不支持。

Objective-C self super(源于网络)

self 是类的隐藏的参数,指向当前当前调用方法的类,另一个隐藏参数是 _cmd,代表当前类方法的selector。这里只关注这个selfsuper是个啥?super并不是隐藏的参数,它只是一个编译器指示符,它和 self指向的是相同的消息接收者,拿上面的代码为例,不论是用[self setName]还是[super setName],接收“setName”这个消息的接收者都是PersonMe* me 这个对象。不同的是,super告诉编译器,当调用setName的方法时,要去调用父类的方法,而不是本类里的。

当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用super时,则从父类的方法列表中开始找。然后调用父类的这个方法。

whilebreakcontinue

switch语句

注意case穿透,建议使用break语句与之搭配使用。

 

 

程序的执行过程


面向对象的基本概念

万事万物皆对象

类可以看成是静态属性(实例变量;OC里面实例变量不能赋初值)和动态属性(方法)的结合体。

实例变量

实例变量可以使用OC语言中任何一种数据类型(包和指针类型)。

即:在声明实例变量的时候不能为其初始化,系统默认会初始化括基本类型。

实例变量的默认作用域范围是整个类。


多态(事物的多种形态

类的声明和创建内存分析

IOS  SDK里面提供了大量编程人员使用的,编程人员也可以定义自己的类。

用@interface来声明一个类,冒号表示继承关系,冒号后面的是类的父亲。

NSObject是所有类的父类。

@end关键字结束

 

Eg:

@interface NewClassName:ParentClassName

{

       实例变量;

}

 

       方法的声明;

@end

 

@implementation NewClassName

方法的实现

{

       //code

}

@end

 

OC的方法声明“-”表示实例方法,“+”表示类方法。

 

对象的初始化

对象必须先创建,然后初始化,才能使用。

NSObject *object = [[NSObject alloc] init ];

首先为对象分配内存地址,为初始化做准备。初始化是对象创建过程中将分配对象的状态设置为合理的初始值、使之处于可用状态的阶段。通过约定,我们要求初始化以init开头,并且在成功后完成初始化,返回一个动态类型对象(id),如果失败则返回nil。初始方法可以包含一个或多个参数用于指定初始值。

 

约定俗称的命名规则:

·类名首字母大写

·变量名和方法名首字母小写

·使用驼峰标示

 

方法的相同:两个方法是否相同,与参数类型和返回类型无关。

 

 

 

self和super关键字

self指的是类对象本身

super是父类对象本身

self用来调用本类对象的方法

super调用父类的方法  

 

 

@class和#import

@class(解决相互包含的问题)

 

@property属性和点语法

设置器和访问器

 

@property和@synthesize

在@property()括号中,可以填写的属性:

readwrite:   默认。

readonly :   只读,意味着没有set方法。

assign:   默认,引用计数不增加。

retain:   引用计数增加1。

atomic:   默认,原子性。

nonatomic:  非原子性。

atomic是OC中的一种线程保护技术,是防止在未完成的时候,被另一个线程使用,造成数据错误。

Objective-C中@property的所有属性详解(源于网络)

1,assign:

简单赋值,不更改索引计数

假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a 和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉
 

应用场合:

对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等)     

适用简单数据类型

2,retain:

与strong相对应,使用了引用计数,retain+1,release-1;当引用 计数为0时,dealloc会被调用,内存被释放
 

3,copy:

用于非共享内存时,每个指针有自己的内存空间
 

4,atomic//默认属性

A,当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对它进行访问

B,当一个变量声明为atomic时,该变量为线程安全型,但是会影响访问速度,

C,当一个变量声明为atomic时,在非ARC编译环境下,需要设置访问锁来保证对该变量进行正确的get/set
 

 5,nonatomic

A,   当一个变量声明为nonatomic时,意味着多个线程可以同时对其进行访问

B,   当一个变量声明为nonatomic时,它是非线程安全型,访问速度快;

C,   当一个变量声明为nonatomic时,当两个不同的线程对其访问时,容易失控。
 

总结:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:



if (property != newValue) { 

    [property release]; 

    property = [newValueretain]; 

}
 

6.strong://ARC中默认属性,等于非ARC中的retain

与retain相对应,

应用场景:

strong属性用于ARC中

@property (strong,nonatomic) ViewController*viewController;
 

7,weak:

与assign相对应,

应用场景:

用于IBOutlets,如,UIViewController的子类,即一般的控件。

@property (weak, nonatomic) IBOutlet UIButton*myButton;

strong与weak的区别举例:

前提:

我们把要用strong或者weak的对象比作一只风筝,风筝想挣脱线的束缚,自由飞翔去,如果此时有一根线,那么这只风筝就挣脱不了

过程分析

strong属性的变量:

当我们把指向一只风筝的变量声明为strong时,此时,你就拥有控制这只风筝的线,假如此时有五个人同时控制这只风筝(即这只风筝对象有三个strong类型的变量指向它),那么只有一种情况,这只风筝才会挣脱掉线的束缚:这三个人都放掉手中的线,(release掉)

weak属性的变量:

当我们把指向一只风筝的变量声明为weak时,此时,就像站在旁边看风筝的观众们一样,当上面的三个人还握着手中的线时,他们只能看到风筝,并不能控制它,他们能做的只能是用手指指向风筝,并大喊,“看,那只风筝飞得真高!”,然而,当上面的三个人把手中的线都放掉时,此时,风筝飞走了,看不见了,不管有再多的观众,他们再也看不到风筝了,这个故事告诉我们一个道理:当strong类型的指针被释放掉之后,所有的指向同一个对象的weak指针都会被清零。

8,readonly

只有get方法,没有set方法

9,readwrite//默认属性

有get/set方法

10,unsafe_unretauined

用在ARC编译环境下,在此环境下,与assign相似。它只是告诉ARC如何正确地调用声明为unsafe_unretauined变量的retain和release

 

 

点语法

 

static关键字:类体内的全局变量的声明。(只在类体里有效)

 

类的继承与重载(源于网络)

 

子类可以继承父类的实例变量和方法。

 

1、复合通过包含作为实例变量的的对象指针实现的。

      @interface Unicycle : NSObject

      {

         Pedal*pedal;

         Tire*tire;

       }//Pedal和tire通过复合的方式组成了Unicycle

 

2、存取方法——用来读取或者改变某个对象属性的方法。

 

#import <Foundation/Foundation.h>

 

@interface Car: NSObject

{

   Engine *engine;

   Tire * tires[4];

}

 

-(Engine *) engine;//getter访问器

-(void) setEngine : (Engine *)newEngine;//setter访问器

-(Tire *) tireAtIndex : (int)index;

-(void) setTire : (Tire *)tire atIndex : (int)Index;

 

@end//Car



3、继承与复合

    继承是“is A”关系;复合是“has A”关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值