iOS总结IOS开发部分语法的简化写法
“我真的很阔落”通过精心收集,向本站投稿了7篇iOS总结IOS开发部分语法的简化写法,这次小编在这里给大家整理后的iOS总结IOS开发部分语法的简化写法,供大家阅读参考。
篇1:iOS总结IOS开发部分语法的简化写法
下列简化写法是IOS6.0以后的新写法
NSNumber
//简化前的写法:
NSNumber *value1;
value1 = [NSNumber numberWithInt:12345];
value1 = [NSNumber numberWithFloat:123.45f];
value1 = [NSNumber numberWithDouble:123.45];
value1 = [NSNumber numberWithBool:YES];
//简化后的写法:
NSNumber *value2;
value2 = @12345;
value2 = @123.45f;
value2 = @123.45;
value2 = @YES;
//装箱表达式也可以采用类似的写法:
NSNumber *piOverSixteen1 = [NSNumber numberWithDouble: ( M_PI / 16 )];
NSString *path1 = [NSString stringWithUTF8String: getenv(“PATH”)];
//可以分别简写为:
NSNumber *piOverSixteen2 = @( M_PI / 16 );
NSString *path2= @( getenv(“PATH”) );
//对于字符串表达式来说,需要注意的是表达式的值一定不能是NULL,否则会抛出异常,
NSArray//对于NSArray的初始化来说,有非常多的写法,这里就不再一一罗列,我们直接看新的写法
NSArray *array;
array = @[]; //空数组
array = @[ a ]; //一个对象的数组
array = @[ a, b, c ]; //多个对象的数组
//编译器在处理时:
array = @[ a, b, c ];
//编译器生成的代码:
id objects[] = { a, b, c };
NSUInteger count = sizeof(objects)/ sizeof(id);
array = [NSArray arrayWithObjects:objects count:count];
//注意,如果a,b,c对象有nil的话,运行时会抛出异常,这点和原来的处理方式不同,编码的时候要多加小心,
NSDictionary
//同样,对于字典这个数据结构来说,有很多种初始化的方式,我们来看新的写法:
NSDictionary *dict;
dict = @{}; //空字典
dict = @{@“key1”:@“value1” }; //包含一个键值对的字典
dict = @{ @“key1” : @“value1”, @“key2” : @“value”, @“key3” : @“value3” }; //包含多个键值对的字典
//采用上述写法构建的容器都是不可变的,如果需要生成可变容器,可以传递-mutableCopy消息。例如
NSMutableArray *mutablePlanets = [@[
@“Mercury”, @“Venus”, @“Earth”,
@“Mars”, @“Jupiter”, @“Saturn”,
@“Uranus”, @“Neptune”
] mutableCopy];
NSMutableDictionary *dic=[@{ @“key1” : @“value1”, @“key2” : @“value”, @“key3” : @“value3” } mutableCopy];
篇2:ios项目开发总结
时间过得真快,一眨眼我的实习生活就结束了,在这几天内,我似乎过了半年,又似乎是一瞬间,又好像做了一个很长很长的梦,梦醒的时候我就回到了我的学校。
三年时间,应该说是或多或少有些收获,可一走出校门后我才了发现我什么也不是,什么也不会,所学的东西少得可怜,连九牛一毛也可以说都不知.
说真的,很有幸我进入的是**家具实业有限公司进行实习,也可以说是试聘;在**信息中心进行编程,是用delphi软件给他们的一分厂的员工进行效益工资和计件工资方面的核算,求出他们的总工资.最后能以报表的形式表现出来,在这方面他们同进要求要个有查询的功能,也说是说输入工号可以调出一个员工三个月这内的所有的工资,同时超出三个月的可以自动消除.同时他们的工作流程是单卡流程,一个卡号,批量的进入,然后经本文来源于文秘公文网过员工的加工操作之后,批量的输出。在这个方面他们有个出材量和购进量之比,也就是说如何去求他们的出材率,出材率越高,就意味着生产出来的好的产品就越多,员工的效益工资就越高。比如他们有四个产品:规格料、指接、拼板、集成材、他们会对这四个产品进行定价;如生产出一立方米规格料的价格是3300元、指接是3600元、拼板是4000元、而集成材则是4860元;通过这些定价我们可以很清楚的看出工厂要求员工生产出什么样的产品。入他们的工序的材料我们称之为毛料,而产出的东西我们又称之为毛坏料,公司规定:如果员工的出材率在76.8%,那么超出的部分就是员工的效益工资,如果低于76.8%,那么员工就没有效益工资,负数归位于零,按零来计算,之后他要求对员工进行效益工资分配,比如有四个工序,送料器,直边、压刨、四面刨、他们又给这些工序的员工进行效益比例的分配、比如送料器是13.4%、直边是9.6%、压刨是50.4%、四面刨是30.6%,在这里又有主副之分,比例为6和4,同时他要求我们将效益工资进行分配到员工,也就是说员工可以很清楚的要看到自己一天能挣多少钱,做到心中有数,当然这个简单,我们只须打印出报表就行了。
还有一点就是对计件工资进行核算,在这方面他们也有一定的规格,比如长度,宽度,厚度在那个范围内,就有不同的定价;比如宽度小于20mm,定价是160元;如果在20mm和40mm之间,那么定价就可能在90元左右;如果大于40mm时,那么就可能是60元了,进行计价工资统计之后我们就可以进行分配了,在这方面他们的比例也是不如,又会添加新的工序,如改料锯了,还会有新的分配比例.
刚开始我们做这个程序的时候,大家都比较盲目,只是负责人说了一下,我们就开始进行编了在这个过程之种我们吃了许多的苦,有时候凌晨三四点我们还在加班,可最后做出的作品是输入速度太慢,我们的主管于是带领我们到他们一楼的微机室是去看他们以前编写的程序;不看不知道,一看吓了我们一大跳,以前我们那有这样想过呀,只要能做出来,没有错误就行了,可是速度呢?人家一个小时输入的东西,我们的程序可能需要一个早晨,看完之后主管对我们说:这样的程序送你,你会用吗?
那个打击呀,辛苦了几天几夜,最终却是这样的一个结果。可打击归打击,我们又得重新来做!相对而言,我们这次要比以前有经验了,一次比一次成熟起来了,在经历了又一个一天一夜的奋战,我们终于又有新希望了,可是心情刚好,那么又传来了消息,说他们的分配比例又发生的变动,价格又有了新的调整,这在以前我们也想过这个问题,也想好好的做,可是我们又一想他们的工厂不是要实用吗?这方面变化的可能性很小,于是为了方期间我将有变量写进了代码之中,这一变,无易宣布我要破产。和我在一起的几个也是这种情况,所以我们这些没有开发过软件的充当软件高手的新手们又得重新面对新的问题了.
失败,又一次被打败!
几天之后我们又做出了程序,很辛苦,此时我们才明白程序员的不易了,编程是一个见效特别慢的东西,而且对方又看不见,如果一不小心你的程序可能会无法打开,或者是说出现别的什么,那就完了,你几天的成果就什么也看不见了,本文自文秘公文网不像别的东西,做了,可以让大家看得见。我的程序在最后的调试时出现了一点小故障,而且工资的分配要对应到每一个员工,可我一时间一点思路也没有了,就只能对应到职务,所以我失败了,我的实习生活也就结束了。
当然比表面来看我是失败了,败的很惨;可是从某种意义上说我又达到了我的目的,因为只有失败的人永远都不会停下思考的脚步,激起了我沉睡的思想,使我一颗盲目的心有了方向,我不能这样输了,从那儿倒下去的,我会从那儿站起来的,认认真真的把毕业设计拿下来了;别人实习了一个月我虽然只有十六天,可在这十六天中我从未停下来过,我是白天干,晚上干,顶着那么大的压力,我的体会绝不低于他们中的任何一个人,说实话,在一段实习期间,我真的有点撑不住了,我也想到过放弃,也曾有好几家单位通知我去面试,也有联通的第二轮复试,可我都放弃了,我不能就这样走了。我输掉的是技能,不是人格;失掉了人格我将失去了所有,失掉技能我还会追回来的!
人生的每一步旅途中,总有着一道无形的栏杆,每一次跨越需要很多的勇气,也不是每一次跨越都能够成功,失败是不可避免的,主要的是要敢于承认失败,面对失败,努力去做,解决它,有这个决心,我想人生会成功的,至少可以无憾!这次我想我会很用心的去学习,去做我的毕业设计!尽量把他做到完美,至少我自己要九十分的满意我才会交出我的作品。
人生就是经历着风风雨雨,在风雨中倒下去,然后站起来的时候,那时的彩虹最美丽!
四周的时间能够和山大的同学一起工作、学习、生活我感到非常的荣幸,同时也感觉到很大的压力,作为电子商务专业的学生从事软件开发感觉还是有一定的困难,特别是我们还是和山大大三的学生一起,在初来时自己就有一些不自信,但随着项目的进展,我慢慢的找到了自己的位置,找到自己的目标,虽然自己与好的同学还有差距,这也给了我很大压力,但是我相信没有压力就没有动力,所以整个实训过程中我都在不断地努力。
实训期间让我学到很多东西,不仅在理论上让我对it领域有了全新的认识,在实践能力上也得到了很大的提高,真正的学到了学以致用,更学到很多做人的道理,对我来说受益匪浅。特别是利用周六上午的时间山大为我们安排的讲座让我们了解it领域一些新的发展动态以及一些领先的技术,让我意识到自己知识的缺少,这激励我在以后的学习、工作、生活中要不断了解信息技术发展动态以及信息发展中出现的新的技术。
除此之外,我还学到了如何与人相处,如何和人跟好的交流,我们组成一个团队大家一起开发一个项目,大家的交流沟通显得尤为重要,如何将自己的想法清楚明白的告诉队友,如何提出自己想法的同时又不伤害其他的队友的面子,这些在我的实训生活中都有一些体会。可是说,第一次亲身体会理论与实际相结合,让我大开眼界。也是对以前学习的一个初审吧,相信这次实训多我以后的学习、工作也将会有很很大的影响,在短短的二十几天里这些宝贵的经验将会成为我以后工作的基石。
篇3:IOS开发(31)之关于self.用法的一些总结(转载)
关于什么时间用self. , 其实是和Obj-c的存取方法有关, 不过网上很多人也都这么解答的, 那它为什么和存取方法有关? 怎么有关的? 并没有多少人回答出来. 同时关于内存管理的内容, 请大家看旺财勇士的Objective-C内存管理总结~CC专版 , 有些东西我就不多解释了.
进入正题, 我们经常会在官方文档里看到这样的代码:
MyClass.h
@interface MyClass : NSObject {
MyObject *myObject;
}
@property (nonatomic, retain) MyObject *myObject;
@end
MyClass.m
@synthesize myObject;
-(id)init
{
if(self = [super init])
{
MyObject * aMyObject = [[MyObject alloc] init];
self.myObject = aMyObject;
[aMyObject release];
}
return self;
}
有人就问, 为什么要这么复杂的赋值? 为什么要加self. ? 直接写成self.myObject = [[MyObject alloc] init];不是也没有错么? 不加self有时好像也是正常的?
现在我们来看看内存管理的内容:
先看间接赋值的:
1.加self.
MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;
self.myObject = aMyObject; //myObject retainCount = 2;
[aMyObject release];//myObject retainCount = 1;
2. 不加self.
MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;
myObject = aMyObject; //myObject retainCount = 1;
[aMyObject release];//对象己经被释放
再看直接赋值的:
3.加self.
self.myObject = [[MyObject alloc] init]; //myObject retainCount = 2;
4. 不加self.
myObject = [[MyObject alloc] init]; //myObject retainCount = 1;
现在是不是有点晕, 我们先来把代码改一下, 官方的一种常见写法:
MyClass.h
@interface MyClass : NSObject {
MyObject * _myObject;
}
@property (nonatomic, retain) MyObject *myObject;
@end
MyClass.m
@synthesize myObject = _myObject;
OK, 你现在再试下, 如果你用self._myObject = aMyObject; 或者 myObject = aMyObject; 你会得到一个错误, 为什么呢, 这里就是和Obj-c的存取方法有关了. 说白了很简单 , 大家都知道, @property (nonatomic, retain) MyObject *myObject; 是为一个属性设置存取方法, 只是平时我们用的方法名和属性名是一样的,现在你把它写成不同的名字, 就会很清楚了. _myObject是实例变量本身, myObject是存取方法名.
现在我们知道self.是访问属性的存取方法了, 那存取方法又怎么工作的? self.myObject = [[MyObject alloc] init]; 为什么会有内存泄露?
关于nonatomic我不多解释了, 它不是我要讲的重点, 而且我也没完全搞清楚, 不误导大家. 我只说assign, retain ,copy.
get方法是:
-(MyObject*)myObject{
return _myObject;
}
set方法是:
// assign
-(void)setMyObject:(id)newValue
{
_myObject = newValue;
}
// retain
-(void)setMyObject:(id)newValue
{
if (_myObject != newValue)
{
[_myObject release];
_myObject = [newValue retain];
}
}
// copy
-(void)setMyObject:(id)newValue
{
if (_myObject != newValue)
{
[_myObject release];
_myObject = [newValue copy];
}
}
其实这些方法里还有别的内容, 并不只是这些. 而且这些方法可以被重写. 比如你写一个
-(MyObject*)myObject
{
return _myObject;
}
放在你的类里, 你调用self.myObject时(不要把它放在等号左边, 那会调用setter方法,#add无所谓,那也是getter方法先调用)就会调用这个方法.
这里多说一句, @property 是为你设置存取方法, 和你的属性(#add即实例变量)无关, 你可以只写一句
@property (readonly) NSString *name;
在你的类里实现
-(NSString*)name
{
NSLog(@“name”);
return @“MyClass”;
}
同样可以用self.name调用.
现在回头说说我们开始的那四个赋值,
当不用self.的时候, 那句话只是一般的赋值, 把一个指针赋给另一个指针, 不会对分配的内存有任何影响,
所以2中不要最后[aMyObject release];这句话和4是一回事. 这里就不多说了.
我们看看1和3, 当调用setMyObject:方法时, 对newValue 做了一次retain操作, 我们必须把原来的newValue释放掉, 不然就会内存泄露, 在1里, 我们有个aMyObject可以用来释放, 在3里, 我们无法释放它, 所以, 在3里, 我们会多出来一个retainCount. 内存泄露了.
说了这么多, 我只想让大家清楚, 什么是调用属性本身, 什么是调用存取方法. 怎么样才能避免内存泄露, 而且, 以上例子里是在自己类里的调用, 如果这个类被别的类调用时, 更要注意一些,
顺便说一下, 如果你想在其它类访问对象属性, 而不是通过存取方法, 你可以用myClass->myObject来访问, 这样是直接访问对象本身, 不过你先要把myObject设成@public. 但这个是官方不提倡的,
代码比较简单, 我还是发出来, 高人们可以忽略了
篇4:IOS 开发学习总结objectivec面向对象之――方法
objective-c 的方法不能独立存在,所有的方法都必须定义在类里,方法在逻辑上,要么属于类,要么属于对象。
方法的所属性
不难发现,方法在语法上和功能上,方法与函数很相似。其实,方法是由传统的函数发展而来的。
objective-c 调用函数时的传参机制和调用方法时的传参机制是一样的,都是值传递,都是传入参数的副本。
方法与传统的函数的显著不同:
在结构化编程语言里,函数是一等公民。整个程序是由一个一个函数组成;
面向对象的语言里,类是一等公民。因此在 OC 里方法不能独立存在,必须属于类或者对象。
由于 objective-c 里的方法不能独立存在,也不能像函数那样独立执行,执行方法时必须使用类或者对象作为调用者。
由上,objective-c 中方法的所属性主要体现在下面的3个方面:
1. 方法不能独立定义,只能在类体里定义。
2. 方法在逻辑上,要么属于类,要么属于对象。
3. objective-c 里的方法不能独立存在,也不能像函数那样独立执行,执行方法时必须使用类或者对象作为调用者。
形参个数可变的方法
如果在定义方法时,在最后一个形参名后增加逗号和三点(,…),就表明该形参可以接受多个参数值。
为了在程序中获取个数可变的形参。需使用如下关键字:
- va_list:这是个用于定义指向可变参数列表的指针变量。
- va_start:这是个函数。指定开始处理可变形参的列表,并让指针变量指向可变形参列表的第一个参数。
- va_end:结束处理可变形参,释放指针变量。
- va_arg:该函数返回指针当前指向的参数的值,并将指针移动到指向下一个参数。
如下示例程序:
头文件:VarArgs.h
#import
实现文件:VarArgs.m
#import VarArgs.h@implementation VarArgs- (void)test:(NSString *) name, ...{ // 使用va_list定义一个argList指针变量,该指针变量指向可变参数列表 va_list argList; // 如果为第一个name参数存在,才需要处理后面的参数 if (name) { // 由于name参数并不在可变参数列表中,因此先处理name参数 NSLog(@%@ , name); // 让argList指向第一个可变参数列表的第一个参数,开始提取可变参数列表的参数 va_start(argList, name); // va_arg用于提取argList指针当前指向的参数,并将指针移动到指向下一个参数 // arg变量用于保存当前获取的参数,如果该参数不为nil,进入循环体 NSString* arg = va_arg(argList, id); while (arg) {// 打印出每一个参数.NSLog(@%@,arg);// 再次提取下一个参数,并将指针移动到指向下一个参数arg = va_arg(argList, id); } // 释放argList指针,结束提取 va_end(argList); }}@endint main(int argc , char * argv[]){ @autoreleasepool{ VarArgs* va = [[VarArgs alloc] init]; [va test:@疯狂iOS讲义 , @疯狂Android讲义, @疯狂Ajax讲义 , nil]; }}
本质上说,这个可变参数也是个类似数组的结构,
最后要指出的是,个数可变的形参只能处于形参列表的最后。即:一个方法中最多只能有一个长度可变的形参。
篇5:IOS 开发学习总结 objectivec面向对象之――类和对象(下)
局部变量和成员变量重名的情况下,局部变量会隐藏成员变量,
为了在方法中强行引用成员变量,可以使用 self 关键字进行区分。
示例代码:
FKWolf.h文件
#import
FKWolf.m 文件
#import FKWolf.h@implementation FKWolf// 定义一个setName:ageAge方法- (void) setName: (NSString*) _name andAge: (int) _age{ // 当局部变量隐藏成员变量时, // 可用self代表调用该方法的对象,这样即可为调用该方法的成员变量赋值了。 self->_name = _name; self->_age = _age;}// 定义一个info方法- (void) info{ NSLog(@我的名字是%@, 年龄是%d岁 , _name , _age);}@endint main(int argc , char * argv[]) { @autoreleasepool{ FKWolf* w = [[FKWolf alloc] init]; [w setName: @灰太狼 andAge:8]; [w info]; }}
篇6:IOS 开发学习总结 objectivec面向对象之――类和对象(下)
当 self 作为对象的默认引用使用时,程序可以像访问普通指针变量一样访问这个 self引用,甚至可以把 self 当成普通方法的返回值。
示例程序:
ReturnSel.m文件
#import
说明:使用 self 作为方法的返回值可以使代码更加简洁,但可能造成实际意义的模糊。
id 类型
id 类型可以代表所有对象的类型。任意类的对象都可赋值给 id 类型的变量。
通过 id 类型的变量来调用方法时,objective-c 将会执行动态绑定。动态绑定:objective-c 将会跟踪对象所属的类,会在运行时判断该对象所属的类,并在运行时确定需要动态调用的方法,而不是在编译时确定要调用的方法。
示例程序:
#import
篇7:IOS 开发学习总结 objectivec面向对象之――成员变量,模拟类变量,单例模式
OC 中变量根据定义位置的不同,可以分为3大类:成员变量,局部变量和全局变量,
之前提到过方法是由函数演化而来的,所以不管是方法中定义的变量,还是函数中定义的变量,都是局部变量。
成员变量及其运行机制
成员变量:指的是在类接口部分或类实现部分定义的变量。
说明:objective-c 的成员变量都是实例变量,并不支持真正的类变量。
实例变量从该类的实例被创建开始起存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。实例变量可以理解为实例成员变量,它作为实例的一个成员,与实例共存亡。
只要实例存在,程序就可以访问该实例的实例变量,在程序中访问实例变量的语法:实例->实例变量;
示例程序:
#import
总结说明:成员变量无需显式初始化,只要为一个类定义了实例变量,系统会为实例变量执行默认初始化。基本类型的实例变量默认被初始化为0;指针类型的成员变量默认被初始化为 nil.
从内存存储的角度看,objective-c 的对象与C 的结构体相似。
这里用上面的代码中定义的类创建2个实例。结合示意图来说明 OC 中实例变量的初始化和内存中的运行机制。
// 创建第一个FKPerson对象FKPerson* p1 = [[FKPerson alloc] init];
// 创建第二个FKPerson对象FKPerson* p2 = [[FKPerson alloc] init];
// 分别为两个FKPerson对象的name成员变量赋值 p1->_name = @张三; p2->_name = @孙悟空;
模拟类变量
通过内部局部变量来模拟类变量,
**注意:**static关键字不能修饰成员变量,只能修饰局部变量,全局变量和函数。
为了模拟类变量,可以在类实现部分定义个 static 修饰的全局变量,并提供一个类方法来暴露该全局变量。
示例代码:
头文件:FKUser.h
#import
实现文件:FKUser.m
#import FKUser.hstatic NSString* nation = nil;@implementation FKUser+ (NSString*) nation{ // 返回nation全局变量 return nation;}+ (void) setNation: (NSString*) newNation{ // 对nation全局变量赋值 if(![nation isEqualToString: newNation]) { nation = newNation; }}@endint main(int argc , char * argv[]) { @autoreleasepool{ // 为FKUser的类变量赋值 [FKUser setNation:@中国]; // 访问FKUser的类变量 NSLog(@FKUser的nation类变量为:%@, [FKUser nation]); }}
单例模式
如果一个类始终只能创建一个实例,则这个类称为单例类。
单例类可以通过 static 全局变量来实现,程序考虑定义一个 static全局变量,该变量用于保存已经创建的 singleton 对象——每次程序需要获取该实例的时候,先判断该 static 全局变量是不是为 nil, 如果为 nil,则初始化一个实例并赋值给 static 全局变量。
示例程序:
FKSingleton.h
#import
FKSingleton.m
#import FKSingleton.hstatic id instance = nil;@implementation FKSingleton+ (id) instance{ // 如果instance为nil if(!instance) { // 创建一个Singleton实例,并将该实例赋给instance全局变量 instance = [[super alloc] init]; } return instance;}@endint main(int argc , char * argv[]) { @autoreleasepool{ // 判断两次获取的实例是否相等,程序将会返回1(代表真) NSLog(@%d , [FKSingleton instance] == [FKSingleton instance]); }}
【iOS总结IOS开发部分语法的简化写法】相关文章:
1.ios个人简历
3.ios开发者简历






文档为doc格式