127.0.0.1 == localhost 表示本机的ip http://127.0.0.1:8080/HttpServer/ 8080 端口号 dns-域名解析器 将域名解析为 ip地址 http协议,http协议的端口号默认是80 手机不同型号的的内存,分辨率。 1, 类文件: 定义类的文件。 可以看看工程的源文件。 2,类: 对一种事物特性和行为的描述。比如人,创建一个对应的类,类的名字叫People,这个类里面可以包含了人的特性和行为。 特性叫“属性‘, 行为叫“方法”。类总体上就包含这两样东西。 类本身是为了创建对象而存在的。 就好比车模是为了生产汽车而存在一样。车模是类,对象就是能跑的汽车。 一个最简单的类是啥样子? 比较一下入口类。 3,对象: 用类创建了对象就是在内存里开辟一块空间,这个空间是独立于其他空间的对象的。 这个空间里有啥呢? 简单的说包含了属性和方法。 4,什么是入口类? 程序运行时首先会自动创建一个类的对象,这个类称之为入口类。 系统不但自动创建了入口类对象,还会根据情况自动使用(也叫调用)了入口类对象的方法。 5, 入口类的方法是怎么自动调用的? 6, 一个类的属性和方法是如何声明和实现的? 7,声明一个Byte类型变量的含义? 就是在内存里开辟了一个字节的空间,来装数据。数据在计算机内部都是二进制形势来存放的。 8, 声明多种类型的变量,体现“基本类型” (也叫简单类型)的含义。(各类型占用多少个字节的内存) 重点:什么是指针,指针跟基本类型变量的区别: 指针是用来保存对象所对应的内存区域的地址的。 9,声明一个不带参数和带参数的方法,然后本地手工调用。 重点: 什么是方法? 以及方法的 “方法名”,”参数类型”,”参数”, “别名”, “ 返回值“ 什么是方法的调用? 怎么传参? 实例方法必须要通过对象调用,本地调用用self代表自身的对象。 People *p= [ [People alloc] init]; //要明白p所指向的对象来自于init方法的返回值。 10,给people类定义跟人有关的属性和方法,体现类的封装和对象的使用 11, 体现给对象的属性传值? 可以体现property属性描述的作用。给方法传值? 体现方法的多个参数的使用。 12,创建男人类和女人类体现继承的关系。继承就是继承了父类的属性和方法。如同把 父类的属性和方法写在子类里一样。 13,创建同样的方法来覆盖父类,但保留父类的功能。 14,创建重载方法。 覆盖和重载体现了面向对象编程思想的“多态性”。多态, 就是多种形态的意思。 15,难点:体现方法的回调性。把本对象传递给另外一个对象的属性,达到通过这个对象来调用其自身的方法的目的。 16, 协议 =============================== 0。ipad设备的大小是1024*768(去掉状态栏)。 1。按钮设置前景图时,按钮的大小与图片大小一致。 2。动画块执行的原理应该是一个分线程 3。在入口类里,让设备旋转的方法不会调用, [[UIApplication sharedApplication] setStatusBarOrientation: UIDeviceOrientationLandscapeLeft]; 只是让设备旋转,并不能让其内容旋转。所以在入口类里添加一个图片的话,他不会跟着设备旋转。 4。在入口类里让设备旋转后,还应该让每个试图控制器也旋转一下。保证加载每个视图控制器的视图都是与设备旋转的方向一致。 5。想让一个view放到视图的最上面一层,可以用[self.view bringSubviewToFront:(UIView *)view]; 6。uiview上添加的多个视图都有一个索引,按照添加的顺序有一个索引(从0 开始)。视图上添加的视图其实是一个数组, NSArray *viewarr=self.view.subviews;找到所有的子视图 for(UIView *vi in viewarr){遍历数组 if (vi==btn1) {判断指针是不是指向咱们要找的那个视图 int index=[viewarr indexOfObject:btn1];根据这个视图找到他在这个父视图上的索引 NSLog(@"%d",index); UIButton *btnselect=(UIButton *)vi; [btnselect setTitle:@"111" forState:UIControlStateNormal]; } } 按钮上有图片时,要把图片的可交互性设为不可交互。 iPad的jian'ban键盘高度是350,动画时间0.3 父视图不可交互时,子视图也不可交互。 导航器只有压栈后才会传值。 继承父类时,xib文件里面的视图不会直接显示,要加载父类的xib文件(创建视图控制器的时候加载xib时绑定父类的xib),用代码写的可以直接继承。 用动画快的时候,要记着把动画块结束掉,否则后面的代码也会执行动画。 Objective-C基本语法?一 类的定义:Java中定义一个类的写法: import java.awt.*; public class A extends Object implements UIApplicationDelegate{ int x=3; String str=”hello”;//创建字符串 public boolean ok(){ return true; } } 总结: 在Objective-C里, 在.h中声明的属性默认为私有,方法默认为公有. 无论属性还是方法, 在.h中仅仅是一个声明,具体的属性的赋值 和 方法的实现都在.m文件中进行。 二: (1)方法的定义详述 比如ava或c#中,一个方法的写法可能是: void hello(bool ishello) { //OOXX }
用objective-C写出来就是: “-” 号表示实例方法,也就是用对象调用的方法。 -(void) hello:(BOOL)ishello { //OOXX } -------------------------------------------------------------------------------------- static void hello(bool ishello) { //OOXX } 用objective-C写出来就是: “+” 号表示静态方法 +(void) hello:(BOOL)ishello { //OOXX } (2)方法的调用详述: 使用中括号
比如java或c#里你可以这么写:
this.hello(true); // 对象调用方法
在Objective-C里,就要写成:
[self hello:YES];
三、object-c 一个方法如何传递多个参数? 如果你用java或者c#写这个方法,大致的写法可能是 public void setKids( String myName, String mySecondName, String myThirdName) { … } 调用这个方法的时候大概的写法可能是: Kids myKids = new Kids(); //创建对象 myKids.setKids (“张大力”, “张二力”, “张小力”);//对象调用方法 Object-c的方法: 一个参数的方法回顾: -(void) hello:(BOOL)ishello{ } 多个参数的方法:从第二个参数开始,每个参数要附加一个别名 -(void) setKids: (NSString *)myName secondKid: (NSString *) mySecondName thirdKid: (NSString *) myThirdName{ //赋值给本地指针
self.myoldset = myName; //错误的赋值, 提示”隐藏实例变量“警告 //self. mySecondName = mySecondName; } object-c 创建对象并调用方法的方式: Kids *myKids =[ [Kids alloc] init] ; //object-c对象调用方法 [myKids setKids: @”张大力” secondKid: @”张二力” thirdKid: @”张小力”];
基本上,如果你能了解下面这段代码的转换关系,你Objective-C的语法也就懂了八成了:
[ [ [MyClass alloc] init: [foo bar] ] autorelease]; 转换成C#或者Java的语法也就是: MyClass.alloc().init(foo.bar()).autorelease(); 三、其他的一些东西 NS命名由来
老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库,也叫cocoa。 这些开发NextStep的人们把函数库里面的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如: NSLog NSString NSInteger NSImage …
举例说明:控制台输出内容 NSString *str1=@”xxx”; NSString *str2=@”yyy”; NSLog(@”%@”,str); 简写为NSLog(str);//xcode4.1会警告 两个字符串连接输出: NSLog(@”%@,%@”, str,str2); 输出结果为xxx,yyy int myInt=3; // Objec-c写法是 NSInteger myInt=3; NSLog (@"----------------------%d",myInt); float myFloat=3.1245;// Objec-c写法是 CGFloat myFloat=3.1245 ; NSLog(@”%f”, myFloat);
你还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等. 比如 CFStringTokenizer 这是个分词的东东 CALayer 这表示Core Animation的层 CGPoint 这表示一个点 UIImage 这表示iPhone里面的图片
CF说的是Core Foundation,CA说的是Core Animation,CG说的是Core Graphics,UI说的是iPhone的User Interface……还有一些别的。 其实这些本站之前的文章有所提及,这里再详细解释一下。
1、 id是什么?:
Objective-C有一种比较特殊的数据类型是id。你可以把它理解为“任意类型”。
在Objective-C里,一切东西都是指针形式保存,你获取到的就是这个对象在内存的位置。那么id就是你知道这个位置
2、BOOL:YES,NO: if(0) 你可以认为YES表示Java里的true,NO表示false。而实际上YES是1,NO是0,BOOL本身就是个char。
3、nil。 Objective-C里的NULL(空)就这么写,表示空指针。 4,常用数据类型经常分为可变或不可变 NSString *S=@”111222”//不可变字符串 NSMutableString// 可变字符串,相当于java里的StringBuffer字符串缓冲 NSArray //不可变数组,初始化的时候就包含了一些对象(可以是不同类型) 创建数组对象:NSArray *array=[[NSArray alloc] initWithObjects:@"hello",@"world",nil]; NSMutableArray //可变数组,可以动态增加内容,相当于java里的vector NSMutableArray *muableArray=[ [NSMutableArray alloc] init];//创建对象 [NSMutableArray addObject:@"good"];//添加内容 NSDictionary //字典 NSMutableDictionary //可变字典,相当于java里的hashtable 5, 如果定义了一个变量或对象但是不使用就会有黄色的警告
什么是类;什么是对象,什么是封装,什么是多态,什么是继承;什么是接口? 简单来说,类就是对一个事物抽象出来的结果。比如人可以作为一个类。一般来说,一个类具有成员变量和成员方法。成员变量相当于属性,比如‘人’具有的变量有胳膊,手脚等。而成员方法是该类能完成的一些功能,比如‘人’可以说话(talk),行走(walk)等。 对象,如果说类是一个抽象概念,那么对象就是具体对象。比如我们说‘人’就是一个抽象概念,但是具体到某个人,比如你,我,他,就是一个‘人’对象。 封装,简单理解就是把一系列的数据放在一个类中,还用前面的例子,如果形容一个人,我们可以用身高(hight),体重(weight)等来描述。在面向对象中,可以用一个Person类封装这些数据,Person具有2 个成员变量,分别是height,weight。使用的时候,每当生成一个这样的类的对象,就具有这2个属性。 继承,如果B类继承A类。那么B类将具有A类的所有方法,同时还可以扩展自己独有的方法和属性。还用人做例子。‘人’是父类,那么‘男人’,‘女人’都是继承自‘人’。也就是说,不论‘男人’,‘女人’,都具有‘身高’,‘体重’这两个属性,同时,他们可以有自己独有的属性,比如‘女人’可以有一个‘三围’属性-_-! 多态,在java中,同一个方法可以有多种不同的表现形式,具体说来分为重载和重写。重载就是一个方法的方法名相同而所具有的参数列表不同。比如: public String talk(String content); //参数是String, public String talk(String content, int number) //参数是2个,String和int 重写则是子类在继承父类的同时,重新实现了父类的某个方法。重写的方法名和参数都必须完全相同。 比如父类 public String talk(String content) { System.out.print(content); } 子类继承该类,所以也具有talk这个方法,他重新定义了该方法的实现 public String talk(String content) { System.out.println("Hi" +content); } 抽象类和一般类的最大区别,就是不能实例化一个对象,但是它可以被继承。 接口则是指定义了方法的名字,而不定义他的实现。方法的具体实现由其实现类去完成。比如 public interface mp3{ public void play(); public void pause(); } 这就定义了一个mp3的接口,任何其他类都可以实现这个类,但是实现这个接口就必须实现这个接口所定义的方法。换句话说,任何实现mp3的类,都必须具有play()和pause()的方法,比如 public class IPod implements mp3{ public void play(){ //具体实现 } public void pause(){ //具体实现 } } 对象的大小是它的数据成员所占存储空间之和,就和结构体一样。类中的函数是所有该类对象通用的方法,不算作对象的成员,因此也不算在对象的存储空间内 什么是堆和栈? 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 程序生成的过程,包括预编译,编译和链接 而函数包含进来,只是说明他需要编译通过,而没有调用的函数,是不会被连接到文件中的,所以不会占用很多资源的 main(int argc,char** argv)函数参数的具体含义 argc 是命令行参数的个数,包括该命令自身 argv 是该程序的命令行参数,每个是一个字符串,第一个就是该命令自身 如在命令行中运行:a.exe b c 那么argc=3 argv:"a.exe","b","c" 这里a.exe是该代码编译成的可执行文件 细节和架构一样重要! 两个字,干净,一定要苛刻的要求干净 你是否有时候自己的代码自己都不想看?你是否有过改过几次需求之后,你的工程已经完全负担不起下一次改动了? 曾经我以为是架构的问题,是经验的问题,是技术水平的问题,我花了很多时间去学习框架,我觉得一个优美的框架可以解决一切问题,可惜最后发现,这远远不够。 把设计、架构这些暂且抛开,这里只说一个词,干净! 一定要拼了命的干净! 我是相当痛恨混乱无序的代码,教训太惨痛了。这里我想借用 《代码的整洁之道》 这本书里面名家说的话。 我喜欢优雅和高效的代码。代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。
整洁的代码简单直接。整洁的代码如同优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。 我无意 做概念上的抄袭,只是今年在做去年开发的总结的时候,对代码加入了一些自己的要求,这个要求对交给我现在的同事和以后组里新来的人手里,作为项目组开发的 基本规范执行。然后这个时候接触了《代码的整洁之道》这本书,有点醍醐灌顶的感觉。那些基本要求做了修改,现在是这个样子,大家可以看一下,这个是我纯主 观的想法,如果有不同的意见欢迎讨论。 1,命名,命名就是注释。 然后,如果发现命名不对,或者后来发觉其他命名方式更好,用项目的命名修改工具修改 2,方法(函数) 3注释 //以上1,2,3 针对团队所有人 4,关于框架 5,重构 6,关于合作 7,关于warning xcode里面开发程序的时候,自己写的代码,0 warning,第三方的,warning处理到 个位数,或者全部处理掉
|
|