个人IOS学习笔记(基础)

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)[n];声明  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)[n]=a;


//默认将a视为一个大的一维数组
//p移动一次相当于原本在大数组中移动n次
//*P移动一次相当于原本在大数组中移动一次
//**(P)才是取出原数组中的值


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


int array[n][n]={0}
n如果是后来输入的值,那么不能这样初始化


static int row[n]在函数里必须声明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)[n]声明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.单例开辟的空间,会在程序退出的时候释放,可以交给操作系统处理





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值