您的位置:首页 > 移动开发 > IOS开发

个人IOS学习笔记(基础)

2013-06-20 15:56 351 查看
int *p=NULL;

for (int i=0; i<n; i++)
{
p=array;
for (int j=0; j<n-1-i; j++)
//此处的j<n-1-i非常重要 {
if(*p<*(p+1))
{
int temp=0;
temp=*p;
*p=*(p+1);
*(p+1)=temp;
}
p++;
}
}
char str[12]={0};//各种指针都是一样的
*(int *)str=9;
*(int *)(str+4)=5;
*(int *)(str+8)=*(int *)str+*(int *)(str+4);
printf("%d\n",*(int *)(str+8));

char *p=5;//指针类型数据也可以存放普通数值,只是不能使用*p赋值或取值
char *p2=7;
char *p1=(int )p+(int )p2;
printf("%d\n",(int )p1);

int **q=NULL;
q=array;//一定要记住这种用法
// printf("q array[i][j]=%d\n",*(*(q+i)+j));//错误,*(q+i*n+j)此种形式不可以实现目的
printf("q2 array[i][j]=%d\n",*(q+i*n+j));//可以

NSString * sk=[NSMutableString
stringWithString:@"ibokan"];
//应该是相当于声明了nsstring 类型指针sk,然后赋值时使用了nsmutablestring的便利构造器
//此时的sk依旧相当于nsstring类型的

NSMutableString *sp=[NSString
stringWithString:@"iphone"];
//这里是一种不正确的方式
//此处,sp应该是mutable类型的指针,但是可惜的是,它指向的空间是nsstring类型的
//所以,sp,仍不可以进行mutable类型的操作
//定义的属性为nsstring类型时,改变nsstring时,改变的是指针

//等号操作是一个赋值操作,对于指针类型的数据来说,他们只是简单的赋值而已,实际是改变指针的指向

//[sp appendString:@"iphone"];
[sk appendString:@"zhangsan"];//此时sk是指向的位置是mutable类型的数据
//上面的可以运行,但是有警告,可以用下面的
[(NSMutableString *)sk
appendString:@"zhangsan"];

c语言中的注意事项:
1.各种类型数据所占字节大小

char short int long float double所占字节分别为:
1, 2, 4, 8, 4 8

2.等号与逗号运算符,以及赋值运算符相关运行顺序

int b=(a=3*5,a+4,a*4),a+5
得到的结果是:a=15,b=60

,的运算等级低于赋值运算符=,所以先运行b=在运行括号后面的,

,运算符连接的值为最后一个表达式的值,前面的表达式全部运行

switch里的case只进入一次,在进入之后如果没有break,就继续运行下面的东西,而不再进行case判断

c语言中只有0和非零,没有true,false

break跳出本次循环,只跳出当前循环
continue继续循环
return 跳出全部循环,运算结束,返回控制权
go to 跳出全部循环,并且继续运行代码

end:printf(); goto end;标记的时候用:冒号,

c语言里的array[10] 实际上是定义了10位的空间,从array[0],到array[10],均可以使用,但array[10]不要使用的好

字符串数组 char a[]="12345" sizeof(a)值为6

数组名是指针,静态指针,不可以改变

字符串赋值,只能用strcpy(str1,str2),将2中的复制到1中,被赋值的字符串必须大于等于要复制的长度

c语言里没有动态数组一说,数组一旦赋值,那么它长度确定

字符串输出碰到0才结束,0 就是\0

strlen指在\0之前的,sizeof()指所占的缓冲区域大小

逻辑与和逻辑或的先后关系,或的优先级小于且,先运行&&再运行||

有符号与无符号相加,默认结果为有符号

16位操作系统指针2个字节
32位操作系统指针4个字节
64位操作系统指针8个字节

%d以十进制输出,
%08x %x以16进制输出,08表示补足8位的长度

指针指向的变量类型不影响指针的大小,但是影响指针的移动

指针自增自减跟指针定义的类型大小有关,直接影响p++ p+1指向的位置

int b=(a=3*5,a+4,a*4),a+5

得到的结果是:a=15,b=60

,的运算等级低于赋值运算符=,所以先运行b=在运行括号后面的,

,运算符连接的值为最后一个表达式的值,前面的表达式全部运行

switch里的case只进入一次,在进入之后如果没有break,就继续运行下面的东西,而不再进行case判断

c语言中只有0和非零,没有true,false

break跳出本次循环,只跳出当前循环

continue继续循环

return 跳出全部循环,运算结束,返回控制权

go to 跳出全部循环,并且继续运行代码

end:printf(); goto end;标记的时候用:冒号,

c语言里的array[10] 实际上是定义了10位的空间,从array[0],到array[10],均可以使用,但array[10]不要使用的好

字符串数组 char a[]="12345" sizeof(a)值为6

数组名是指针,静态指针,不可以改变

字符串赋值,只能用strcpy(str1,str2),将2中的复制到1中,被赋值的字符串必须大于等于要复制的长度

c语言里没有动态数组一说,数组一旦赋值,那么它长度确定

字符串输出碰到0才结束,0 就是\0

strlen指在\0之前的,sizeof()指所占的缓冲区域大小

逻辑与和逻辑或的先后关系,或的优先级小于且,先运行&&再运行||

有符号与无符号相加,默认结果为有符号

16位操作系统指针2个字节

32位操作系统指针4个字节

64位操作系统指针8个字节

%d以十进制输出,

%08x %x以16进制输出,08表示补足8位的长度

指针指向的变量类型不影响指针的大小,但是影响指针的移动

指针自增自减跟指针定义的类型大小有关,直接影响p++ p+1指向的位置

int array[10]={1}仅仅是给第一个元素赋予了初始值1,但是新创建的数组,其中所有元素默认值是0

char array[10]={1}仅仅是给第一个元素赋予了初始值1

对于char型数组 sizeof获取的值要比strlen大1

strlen获取的是实际的字符串长度,而sizeof获取的实际上是字符串长度+1位'\0' 的长度

定义指针的时候,尽量不要重复同时定义两个

char *p1=null,p2=null;会对*p2报错的,系统会认为p2为char型

char *p1=null,*p2=null;则不会报错,可能同时定义多个指针的方法就是这样

sprintf()函数,将后面的两种参数打印到第一个参数里

memset()函数,按照字节赋值,要是用这函数给int型数据赋值,会导致int型数据赋值,仅赋值后半个字符

函数里的静态变量,并非不会发生更改,而是生存周期长而已

静态变量只定义一次,函数退出后,变量的值还在

加static 在堆中分配内存,不加在堆栈中分配内存

在c中使用结构体的时候,结构体在使用时的声明需要

struct student st struct +类型名 +变量名

指针数组 为了使字符串的使用更加方便,其内的每个元素都是一个指向数组的指针

存放指针的数组 int *p[5]里面存放的元素都是指向整型的指针

int(*p)[4] 数组指针 这是指向一维数组的指针变量

int(*p)
;声明 p=&array[0]赋值

p=&array[0]此为赋值,实际定义时可以用

a ={{1,2,3,4},{ 5,6,7,8},{9,10,11,12}}

int[3][4]=a;此时用int(*p)[4] 可以更方便的给数组分层

a[i][j]=*((p+i)+j),这样能够更方便的用指针操作多维数组中的元素

p[1]就是相当于*(p+1)

int a[3][2]={{1,2},{3,4},{5,6}};

int (*p)
=a;

//默认将a视为一个大的一维数组

//p移动一次相当于原本在大数组中移动n次

//*P移动一次相当于原本在大数组中移动一次

//**(P)才是取出原数组中的值

对于函数的调用,好像有返回值的函数在使用前必须声明,如果没有返回值,就不需要声明,可以直接调用

int array

={0}

n如果是后来输入的值,那么不能这样初始化

static int row
在函数里必须声明static的数组时,必须给定数组的大小,即:如果n为待输入的参数,则不能这样定义

memset(str,0,sizeof(str))给数组初始化,中间参数为值

const char * test=array

//const 限定变量不允许被改变

const int *A或int const *A //修饰指向的对象 A可变,A指向的对象不可变

int * const A//const 修饰指针A A不可变,A指向的对象可变

const int * const A//指针A和A指向的对象都不可变

求结构体类型的数组长度 sizeof(array)/sizeof(student)

strlen只是求字符串长度

用指针赋值需要:1.判断地址有效与否,2.查看空间是否足够大

函数的声明不能放到main函数里,只能并列放到函数外

(int &a)传引用,只能在c++的文件中使用,或者是在oc中把.m文件改成.mm文件

(int *a)传址

(int a)传值

作用域和内存区的对应并不是一致的

结构体的大小,在一般情况下会默认补足4的整数倍的位数

添加 pack(1) 可以实现让系统保持原有大小

#pragma pack(1)

结构体内尽量不使用指针,可以使用数组

结构体不可以自增自减,结构体指针在自增自减时移动位数为结构体大小

typedef相当于定义于类型的宏定义

typedef定义出来的结构体,不能带指向自身的指针

malloc(大小),字节数,开辟的空间位于堆里

memset(指针,初始值,长度);

free(指针),指针为分配内存时返回的指针,释放的空间大小系统自己知道,在系统分配的时候已经记下分配了多大,所以释放时不用传递需要释放多大内存。

char str[12]={0};

*(int *)str=9;

*(int *)(str+4)=5;

*(int *)(str+8)=*(int *)str+*(int *)(str+4)

此时输出*(int *)(str+8)

数组名不能取地址

view是手机交互的主要交互方式

iphone os开发

支持抽象接口

支持处理多点触摸事件,最多11点

支持网络链接

iphone之所以比touch贵很多,就是因为他的需求量大

支持sqlite数据库

数据库一般在系统架构的时候设计,对于庞大的数据支持,使用数据库,或者使用网络链接连接数据库

CFNETWORK

media对基本的绘图,声音,视频技术的支持 Core Animation

cocoa touch以及media层里有一个oc的,其他都是c的

Open GL,开源的图形渲染引擎

directX微软的引擎

openGL更好

Cocoa Touch 主要有Foundation和UIKit两个框架构成

UIKit,主要的UI控件,和控制器等类

API,application programming interface//应用编程接口

SDK,Software Development Kit//软件开发工具包

MVC,model,view,controller//模型,视图,控制器

编程尽量使用系统提供API

APP包,应用程序树,APPLICATION BUNDLE

包里包含真正的可执行型文件,xcode在编译时将他整理成一个包

plist,配置文件,实际上就是一个xml文档

IB快速开发用户界面

快速原型,快速搭建框架,

模拟器架构下编译成x86代码

真机编译成arm架构下的代码

智能文件夹(紫色的)可以按照类别自动分类,怎么建?

file's owner连接倒谁,就是拥有谁

first responsder,第一响应者,是一直在变化的,

IB里绘制的东西可以直接预览,不需要预览,但是IB不保存的情况下在xcode运行不能显示

父对象,子对象,关系是拥有,父对象管理子对象

--function--,用%s,可以打印方法名

file's Owner里面必须指定一个根视图(view)

applicationWillTerminate:在程序即将结束时,调用此程序段

applicationDidFinishLaunching:这个好像时委托里需要实现的部分

上传之前要先下载

如果分类种数过多的话,最好先用一个type类型的整型数据分类,这样可以减少bool类型的值的个数

NSObject URResponder有三个子类UIView,UIController,UIApplication

UIWindow是UIView的子类

UIApplication UIWindow UIController,UISuperView,UIVIew,事件响应的顺序,依次上传;

view通常UIView是一个实例,表示一块矩形区域,

view在App占有重要地位,以响应用户的触发事件

view是App与用户交互的主要机制,主要交互方式,还有声音,重力加速

view中可以嵌入另外的view,嵌入一个view的框(frame)的view称作子视图,(subview);

子视图是位于view时,子视图显示在superview上面的

superview响应subview不响应的事件

视图的责任:

绘画与动画,响应事件,

视图树和布局管理

在一个有着很多显示内容的App中,每一个画面(screen)都需要一个view controller来支撑

CORE GRAPHIC数据结构,

CGRect,包含 CGPoint,CGSize

alpha透明度,从0.0到1.0变化,为0时,不接收任何交互

multiple TouchEnabled;是否支持多点触摸

userInteractionEnable;不接收交互,不能称为第一响应者

autoresizingMask:灵活的适应父视图

tag,可以传递指针

layer,显示,可以加阴影,边框,做成圆角

(IBOutlet)表明,这两个对象都是从IB里创建的,要使用就需要保证里面的连线是正确的

window底色是白色的

view底色是灰色的

每个viewController都有一个默认的view,根视图,只有一个

每个window都有一个跟控制器,不知道为什么,不用

透明度为0,不可以交互

clear颜色,可以交互

在IB中的MainWindow.nib文件中,file's owner指向代理,代理指向window和viewcontroller

在自己的viewcontroller.nib文件中,file's owner指向view

开放了loadView那么,系统就不会自动生成根视图了,

开放了之后,系统在初始化根视图时,调用loadView内的方法

并不是所有 的view都有viewcontroller,view没有viewcontroller也可以加载到window,但是不要这样使用

一个viewcontroller,可以用来存放同种种类,逻辑的view,以便最后能够在viewcontroller里能够更方便的使用,操作

origin原点

remove时,会触发release

@class 以及#define后面都是不加;分号的

%比* /运算符的等级高,如果要对两个数的积取余,那么就要加个括号

视图控制器,UIViewController:属性view,title,interfaceOrientation(有四种模式)

initWithNib:boundle:使用nib文件初始化,自动的编码解码

viewDidLoad,当视图加载完成后,只在初始化的时候运行

initWithCoder,用编码后的东西初始化

loadView如果开放了,就会使IB里面的View失效

viewWillAppear:视图将要出现时,每次出现的时候都会调用

viewDidAppear:视图出现后

线程,防止主线程阻塞

Label里面,不能设置view

在同一界面里,可以使用viewWithTag:,这里获得的视图,是与本身同级别的,如果要获得子视图,只能使用subviews

使用在.h文件中声明的实例变量时,要把他当做已经定义的全局变量,一定主要,不要再写生类型名,重新声明,那样只是相当于创建了一个与实例变量同名的局部变量

对于用代码写的UIActivityIndicatorView的实例变量,用代码写的时候,停止动作的时候,空间消失

如果数字在类中作为实例变量,那么不要用便利构造器生成,用alloc,因为很可能发生意外错误

指定iPickerView时,在指定数据时用的数组,一定不要用便利构造器,此时很可能会发生错误的,不是报错,而是在系统运行时出错

代理,相当于指针,通过指针使用别人的方法

使用tab bar,传递里面需要的数据时,需要将添加数据的部分放置到viewvillappear代码里,也可以用delegate代理

tab bar 最多只能有5个

tab bar 也有一个跟视图属性,不过这个属性不需要手动设定,系统会自动将第一个bar里的viewcontroller的view设置成自己的view(默认视图)

tab bar 里面有一个不可变的数组,用来所有的viewcontroller

从viewcontroller自动创建的视图,0,0,320,480

如果从系统那里继承了第一个视图,那么为了满足之后的视图就应该是0,20,320,460

viewController默认的颜色是透明的,clear

view默认的颜色graycolor

window默认的颜色是白色的

tabBar里面的controller都拥有一个tabBarItem,可以修改它的badgeValue,这个属性,就是在tabBar上显示的红色字符串

这个属性不是tabBarController,而是其中的viewcontroller的

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:10];

如果要控制图标在进入之前的右上角红色字符串,那么在controller中设置上面的这句,可以实现在程序中动态改变进入程序前的图标样式

bounds与frame的区别,bounds始终是相对于自身的,他的x,y值为0,0

而frame的x,y值不是相对于自身的

AVAudioPlayer,可以从内存初始化,也可以从本地data初始化,但是不能从网址初始化.

每秒25帧可以实现动态的流畅效果

音频可以同时开始多个线程,不用考虑,他们是封装好的独立线程

如果实现在线播放的话,需要先下载后播放

实现音频的拖放,改变播放的起始点

在线播放,先下载再播放

初始化正常的情况,error为空,nil,不为空,就是初始化失败.

序列化的数据.NSData,为了数据存储和传输,预先使用序列化

MPMoviePlayerController,不能通过内存初始化,不能从data初始化,

-(id)initWithContentURL(NSURL *)url

需要先确定网址连接的地方是系统支持的格式

如果网站提供的服务有浏览器识别,那么需要在应用里模拟浏览器的访问形式.

[NSRunLoop cancelPreviousPerformRequestsWithTarget:self];//取消单击产生的效果

[self performSelector:@selector(singleTap:) withObject:self afterDelay:0.3];//延迟调用方法

scheme 协议名称

NSLog(@"line:%d",__LINE__);//可以输出这句话在代码的多少行

detailViewController=[[DetailViewController alloc] initWithNibName:@"DetailController" bundle:nil];

//然后调用detailviewcontroller的初始化文件viewDidLoad

继续运行中间的

//然后detailviewcontroller发生villappear

[self.navigationController pushViewController:detailViewController animated:YES];

//然后detailviewcontroller发生didappear

[self.view addsubview:new.view]

//很可能会发生新添加的view会距离view顶端20

NSNavigation的推送

[self.navigationController pushViewController:detailViewController animated:YES];

所引发的事件的顺序应该是

self willdisappear

detailViewController willappear

//然后视图出现

[self.view addSubview:detailViewController.view];

//替换掉原有的view

self diddisappear

detailViewController didappear

如果在loadview中添加代码,那么一定要注意,这里不能调用self.view的取出器,因为这话会再次调用此函数,导致死循环

但是可以调用self.view的设置器,改变整个view

loadview函数,如果打开,那么就一定要给self.view赋予新的值,也就是说,loadview和使用nib文件初始化,并不能自动的一起使用,暂时认为两者不能同时使用

使用nib文件初始化的是viewcontroller

此处只能是用代码描绘view的样式,如果用viewcontroller的view,来赋值,暂时认为,不会保存viewcontroller,

视图存在,但是他们的controller消失了

如果要向view中添加新控件,那么要把代码写到viewDidLoad

viewWillAppear之类的方法都是属于viewController的,

一般来说,对于视图直接加载到window上的controller有效

可以简单的认为在appdelegate中出现的controller通过他们推出的controller有效

特别的是这些功能必须是在加载于window的controller才能实现,层级过长的则不能实现

如果没有任何报错就退出程序,很可能是因为程序内存中不该release的变量强行release了

self.view=aTableView;

//这句话不应出现在didload中,因为他会重复调用的

loadview里使用self.view=aTableView;

viewdidload里面使用 [self.view addSubview:aTableView];

viewdidload里面如果使用self.view=aTableView;并且如果aTableView=nil,不存在的话,那么viewdidload会重复调用三次;

self.title相当于self.navigationItem.title

对于frame的操作,只能用,语法,不能用[]方法

归档,只是实现编码,序列化,可以改变数据库存储类型有限的不足,对所有的数据类型都能够归档,然后所有类型的数据都能够存储了

UISearchBar,在添加的时候要在添加完其他控件之后

否则可能会因为控件的层叠而不能显示出scope bar

如果这样,解决办法

- (void)searchBarTextDidBeginEditing:(UISearchBar *)hsearchBar

{

[self.view bringSubviewToFront:hsearchBar];

}

@"%%",这样可以打印出%,

进入工程的设置界面,搜索static ,在Run static Analyzer,后面打钩

property

protect

protocol协议,默认为必须实现的方法

协议里

@optional可选的方法

@required必须的

UISwitch,UISlider,UISegmentControl,UIActionSheet,UIAlertView,使用要点

/Users/ibokanwisdom/Library/Application Support/iPhone Simulator/4.2

//里面就是沙盒路径

xml解析,要用递归方法

自定义单选按钮

消息和通知的区别

在UITableView里放一组视频,点击视频,播放该视频.

只是控件的排列组合,很少有控件之间的拥有和包含关系

1.oc里

管理,数据持久化,传值方式,delegate详解

2.iPhone控件

UIScrollView UIAlertView,UIActionSheet,UITextView,如加速计,自定义tableView ,地图,照相机,指南针,推送,等等

3.学习方法,学习态度

4.常见警告,错误的分析以及解决方案

google地图的各种功能,两点之间划线

照相机的使用,自定义界面

加速计使用,控制方向

连连看,提示,

多线程,哪些类和多线程有关系,整点报时,(多线程实现)

本地化应用程序,(多语言设置)

内存管理,具体每个控件,检测内存

core data数据持久化

UIScrollView习惯用法,动态加载图文,适应横竖屏

UIAlertView 自定义效果

UITableView自定义

推送通知,手机端怎么实现,服务器端怎么实现

UITabBar和UINavigationBar自定义

OpenGL介绍,入门

cocoa 2d介绍,入门

UIPickerView自定义效果,选择日期

综合应用,UITabBarController,UINavigationController,UITableViewController等

数据库,归档,序列化,

聊天程序的输入框

视频播放 MPMovieController,MPMovieViewController

考虑兼容低版本

KVC和KVO 在程序中的应用(监视器)

socket 原理,以及数据传输,

手势,触摸, 4.0之前没有手势 各种事件,多点触摸,旋转

画图,划线,画倒影,色彩渐变,股票x线,柱状,饼状

layer,view,都有各种动画, 区别,各种layer动画

自定义单选,复选控件 调用的方法写成代理

运行时 系统运行各种动作,方法时,系统运行原理,

command+n快速新建文件

command+shift+n 快速新建文件夹

command +Alt+上下箭头(方向键)实现.m与.h之间的切换

command+Alt+ctrl+R,能够快速清空消息框

command+shift+L打开Liarbary

command+ctrl+s创建Snapshots

command+shift+c打开树形构造图

变量名不要声明为progress

在行进中进行思考,边做边思考(至多拐两次,到达目标)

把复杂的逻辑简单化,快速实现

简化程序,可以欺骗用户的眼睛

功能按钮的位置固定,但是,视图的排列顺序可以变

1.连连看,实现路径检查

2.遍历子视图

3.官方的API

4.使用tab bar 整合之前的应用

mutable 可变的

程序开发

把合适的代码抄到合适的位置上

主要在实现,不是研究

目的性要强

在不影响进度的情况下可以研究,但是不要执着,因为研究出来也没什么价值

一团队只要有一两个leader就好了,其他人只管实现就好了

木匠多了墙倒了

乔布斯购买了NextStep和梦工厂

程序退出时间不得超过5秒,所以用户数据需要分段保存

算法要优化,但是不要过度优化

快速启动,短暂使用,随时可以退出

posix,底层是unix系统,有一层图形话的交互方式

分辨率的提高不影响应用开发

都是使用320*480,3.5英寸,不需要考虑分辨率的适配

一个界面尽量只完成一个功能

北京地铁最高运量是1000W人次/天

协议中,如果类中的实例变量实现协议,也就是代理,为什么要用assign?

如果delegate被释放掉了,那么,函数还能正常使用协议中的方法么?实现协议的对象被释放的话,那么就不能使用协议中的方法了,使用协议中的方法时,一定要保证实现协议的对象没有被释放,在使用该协议的方法之前,紧急指定实现的对象

nsenum,谓词,断定

nsscanner

第三方框架有哪些?哪里下载?

工作待遇和掌握的知识相关的

数组,字符串,字典

程序运行一般进行:编译,连接,运行

在10的7次方的数组中,找出相同的数据并输出

21.22.6.28.

%@打印的是对象的description方法

%p打印的是对象的地址,打印的应该是指针所指向的地址

内存分为 堆 桟 代码 全局 四个部分

作用域失去作用就是因为出桟引起的

函数的返回值为指针时,

memcpy函数的作用??//复制

怎么样传递

int a[3][5]={1,2,3,5,4,6,7,8};

int (*p)[5]=a;

p为什么类型的数据?

%c 单个字符

%d 十进制整数

%f 十进制浮点数

%o 八进制数

%s 字符串

%u 无符号十进制数

%x 十六进制数

#ifdef _cpTusplus

extern"C"

#endif

shark,Instruments

ibokan only

1.查看应用软件的用户评价

2.查看要下载的用户软件的产品信息

3.iphone有照相功能,也可以有扫描功能

应用程序大小超过10MB会让用户抱怨

系统工程师建议,应用程序所占内存不应超过20MB

对便签的整理1

1.在c中,逗号运算符的返回值为逗号运算符中最后一个表达式的值

2.逗号运算符的运算等级低于赋值运算符=

证明 int b=(a=3*5,a+4,a*4),a+5;
得到的结果是a=15,b=60

3.switch 语句,只要从case进入后,如果没有break,那么,之后case表达式内的语句也会被依次运行,就是说,在进入case表达式后,不会再对case表达式进行判断,直接运行之后的语句

4.c语言中只有0和非0,没有true,false

5,break跳出本次循环,只是跳出当前循环
continue继续下次循环
return 跳出全部循环,返回控制权
go to 跳出全部循环,继续运行代码

6.使用go to语句时,对于标记使用冒号: Last:

7.C语言里array[10]实际上只定义了10位空间,从array[0]开始,没有array[10],但是如果强行使用的话也可以,但是有数据被覆盖的危险

8.字符串数组 char a[]="12345" sizeof(a)值为6,strlen(a)值为5
char * p="zhangsan";这样可以直接赋值字符串,在字符串已经的情况好用

9.数组名是指针,静态指针,不可改变

10.字符串赋值,strcpy(str1,str2),将str2中的数据复制到str1

11.逻辑与的优先级大于逻辑或,先执行&&再执行||,可以实现 间断取出合适的区间

12.c语言里没有动态数组,数组确定下来的时候,长度也就确定了

13.有符号的数与无符号的数相加,默认结果为有符号

14.操作系统的位数,与系统内指针变量的长度一致

15. %d,%i将数据以10进制输出,%x,以16进制输出, %5.2f 5为总长度,2为小数点后的长度

16.指针指向的类型,不影响指针的大小,但是影响指针的移动,直接影响p++,p+1移动的距离

17.数组的初始化,char array[10]={1};仅仅是第一个元素赋予了初始值

18.重复定义两个指针 ,char * p1=null,*p2=null;记得p2之前有个*

19.sprintf(),将数据打印到第一个参数里,memset按字节赋值
memset(str,0,sizeof(str))给数组初始化,中间参数为值

20.函数里的静态变量,只是生存周期长而已,函数退出后,变量的值还在,应该是static 修饰的变量是在堆里存放的

21.在c中使用结构体时,声明需要struct student st,struct +类型名+变量名

22.指针数组,为了使字符串的使用更加方便,其内每个都是一个指针
声明 int *p[5],里面存放的都是指向整型数据的指针

23.int(*p)[4]数组指针,指向一维数组的指针变量
int(*p)
声明p=&array[0]赋值

24.int a[3][4]; int(*p)[4]=a;此时a[i][j]=*((p+i)+j),这样能够方便的使用指针操作数组中的元素
p[1]相当于*(p+1),

25.const char * test=array;
//const限定变量不允许被改变
const int * A 或int const * A//指针修饰的对象,不可以通过指针A改变
int * const A //const修饰指针A,A不可变指向,A的值可以被改变

26.求结构体类型的数组的长度sizeof(array)/sizeof(student)
strlen 只是求字符串的长度

27.使用指针需要,1.地址有效,2,可用空间足够大

28.函数的声明不要放到main函数里,并列放到函数外

29.(int &a)传引用,只有在C++文件中使用,或者把OC中的.m文件改名为.mm文件
(int * a)传址
(int a)传值

30.#pragma pack(1)
结构体的大小,在一般情况下会默认补足4位的整数倍位数,为了让其维持其原有大小,可以添加#pragma pack(1)

31.结构体内尽量不使用指针,可以使用数组(在进行复制的时候不会出错)

32.结构体不可以自增自减,结构体指针在自增自减时移动的位数为结构体的大小

33.typedef相当于定义于类型的宏定义
typedef定义出来的结构体,不能带有指向自身的指针

34.malloc(大小),字节数,开辟的空间位于堆里,需要手动的控制释放空间
memset(指针,初始值,长度)
free(指针)释放空间,此时不需要再指定长度

35,数组名不能取地址
//蓝色,5.4号最后整理
对便签的整理2
1.静态,运行之前已经指定类型,规定好大小了
动态,脚本语言javascript,没有类型限制,运行之前没有指定大小

2.方法在.h中声明,在.m中具体实现,但是不在.h中声明的就在.m中实现的方法也可以在类中,或者类外调用,称为私有方法,只是没有在.h中显示列举,并非外部不能调用

3.%i=%d 可以接收整型数据
%p,如果参数为变量,那么可以用这输出参数的地址

4.nonatomic表示方法是非原子性的,此时运行速度较快,但是安全性低,一般要使用
如果没有加nontomic表示方法是原子性的,此时不写nonatomic即可,不写atomic

5.assign,对基础数据类型NSInteger,CGFloat,int ,float,double,char,对这些类型的变量修饰较好
copy一般对NSString类型(使用的类必须满足nscopying协议)
实现copyWithZone:(Zone zone)
retain对其他NSObject和其子类
assign只是对原值进行里简单赋值,只是传值
retain将原值的保存时间延长到类失效后
copy只对实现里NSCopying协议的对象生效,与retain不同的是,他将原值赋值里一份,存放到里类中

6.-号方法,实例方法,+号方法,类方法
类方法一般以类型名称开头,实例方法一般用init开头

7.汉字与字母占的字符长度一样长,都是1,不区分
[str length]//length方法

8.oc的数组只能放实例,不能放简单类型
[实例 capitalizedString]将单词的首字母大写,属于实例方法

9.[实例 ismemberof [NSString class]]此方法返回true 或NO,在实例为后面的类生成时返回true
isKindOf 判断实例是否为后面的类生成,或者其子类生成

10.OC里不允许有两个方法名相同的函数
OC是一个消息机制,调用方法的实例或者类,被称为接收器receiver
方法名称为选择器

11.任何对象在使用之前必须被创建,alloc,或者copy

12.@class Tire告诉系统,相信我,以后你会知道这个类到底是什么
在文件只使用了该类的指针时,可以这样用,
在有循环依赖关系时,也可以使用这种方法

13.refactor重命名,可以实现类名的更改
选中类名后,Edit->refactor
或者使用Edit All in Scope

14.private,自身定义的类可以使用
protected自身定义的类和子类可以用
public所有类可以访问
//可以访问的意思指,通过st->name的方式访问

15.变量的作用范围,默认为受保护类型,
就是说在类内,可以通过st->name访问
在类外,即使通过st->name方法也是不能访问的

16.在最后的dealloc中要释放的变量,
只要考虑在便利构造器中使用的alloc,new ,copy即可,不需要考虑自身self的释放,
凡是使用init方法构造生成的对象,那么他们都有自己的alloc方法,所以,他们的释放是由他们自己解决的

17.+(B*)defaultB单例,由全局共享的对象,是一个加号方法
强类型,返回的类型必须和当前类型一致,不能使用泛型Id

18.对于希望被子类继承并继续使用的类,返回值类型最好定为泛型id
此时可以保证子类调用时,不会产生类型不匹配

19.便利构造器的内存管理,一般都要使用autorelease

20.设置器中,保存新传入对象的所有权,放弃旧对象的所有权
在dealloc要对类进行保存的对象进行释放,release

21.对于已经实现了nscopying协议的类,他的子类如果没有实现nscopying就使用copy,系统会崩溃

22.单例开辟的空间,会在程序退出的时候释放,可以交给操作系统处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: