当前位置:  编程技术>移动开发
本页文章导读:
    ▪Objective-C基础教程札记2        Objective-C基础教程笔记2   Foundation Kit Cocoa由两个不同的框架组成 Foundation Kit和Application Kit Foundation框架中有很多诸如NSString,NSArray等低级类和数据类型     #import <Foundation/Foundation.h> int mai.........
    ▪ 在Activity中利用AChartEngine (ACE)展示图表        在Activity中利用AChartEngine (ACE)显示图表. 在Activity中利用AChartEngine (ACE)显示图表. 基本思路: 设定数据,渲染器,并且显示到GraphicsView中 .   具体操作: 1.布局文件(itemchartactivity.xml)中增加: <LinearLa.........
    ▪ 15 个变量跟方法命名的最佳实践[转]       15 个变量和方法命名的最佳实践[转] 15 个变量和方法命名的最佳实践 在每个代码范围内使用足够短和足够长的名称:例如循环计算器用一个字符就可以了,如i;条件和循环变量用一个单词.........

[1]Objective-C基础教程札记2
    来源: 互联网  发布时间: 2014-02-18
Objective-C基础教程笔记2

 

Foundation Kit

Cocoa由两个不同的框架组成 Foundation Kit和Application Kit

Foundation框架中有很多诸如NSString,NSArray等低级类和数据类型

 

 

#import <Foundation/Foundation.h>
int main(int argc, const char *argv[]){
	NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
	//insert code here...
	NSLog(@"Hello, World!");
	
	[pool drain];
	return 0;
}

 

通过alloc创建并通过init初始化了一个池,在结尾处排空,这是Cocoa内存管理的预览

 

一些有用的数据类型

 

范围 NSRange

 

typedef struct _NSRange{
	unsigned int location;
	unsigned int length;
}NSRange;

 

表示相关事物的范围,如字符串中的字符范围或数组中的元素范围

创建一个新的NSRange有3种方式

 

//1
NSRange range;
range.location=17;
range.length=4;
//2
NSRange range={17,4};
//3
NSRange range=NSMakeRange(17,4);

 

第三种方法的好处是可以在任何能够使用函数的地方使用,比如当作参数

 

[anObject flarbulateWithRange: NSMakeRange(13,15)];

 

 

几何数据类型 NSPoint,NSSize

 

typedef struct _NSPoint{
	float x;
	float y;
}NSPoint;

typedef struct _NSSize{
	float width;
	float height;
}NSSize;

 

比如Cocoa提供了矩形数据类型

 

typedef struct _NSRect{
	NSPoint origin;
	NSSize size;
}NSRect;

 

同样提供了NSMakePoint(),NSMakeSize(),NSMakeRect()方法

将这些数据类型作为struct而不是对象的好处是性能更高

 

字符串 NSString

创建字符串

 

NSString *height;
height=[NSString stringWithFormat: @"Your height is %d feet",5];

 

类方法

我们所创建的大部分方法是实例方法 用前导减号 - 声明

如果方法用于实现常规功能,用前导加好 + 来声明类方法

就如NSString的stringWithFormat方法

 

+ (id) stringWithFormat: (NSString *) format, ...;

 

关于大小

 

- (unsigned int) length;

 

使用方式

 

unsigned int length=[height length];

 

该方法可以正确处理国际字符串

比较

 

isEqualToString
- (BOOL) isEqualToString: (NSString *) aString;

 

使用方式

 

NSString *thing1=@"hello 5";
NSString *thing2;
thing2=[NSString stringWithFormat: @"hello %d",5];
if(thing1 isEqualToString: thing2]){
	NSLog(@"They are the same!");
}

 

同样的compare方法

 

- (NSCompar isonResult) compare: (NSString *) string;

 

返回一个NSComparisonResult枚举类型

type enum _NSComparisonResult{
	NSOrderedAscending=-1,
	NSOrderedSame,
	NSOrderedDescending
}NSComparisonResult;

如果返回NSOrderedAscending 表示左侧小于右侧 其他类似

不区分大小写的比较

- (NSComparisonResult) compare: (NSString *) string
						options: (unsigned) mask;

options参数是一个掩码

NSCaseInsensitiveSearch 不区分大小写

NSLiteralSearch 完全比较,区分大小写

NSNumericSearch 比较字符个数而不是字符值 比如100应该排在99以后

if([thing1 compare: thing2
		options: NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame){
			NSLog(@"They match");
		}

判断字符串内是否包含其他字符串

- (BOOL) hasPrefix: (NSString *) aString;
- (BOOL) hasSuffix: (NSString *) aString;

分别检查以特定字符串开头和结尾

- (NSRange) rangeOfString: (NSString *) aString;

返回匹配的位置,如果找不到 则range.start=NSNotFound

 

可变性

NSString是不可变的

NSMutableString是可变字符串

两者间比较类似Java中的String和StringBuffer

创建NSMutableString的方法

+ (id) stringWithCapacity: (unsigned) capacity;

该容量只是一个建议 

NSMutableString *string;
string = [NSMutableString stringWithCapacity: 42];

可以使用一些方法操作该string

- (void) appendString: (NSString *) aString;
- (void) appendFormat: (NSString *) format, ...;

使用起来非常方便 也很显而易见

NSMutableString *string;
string=[NSMutableString stringWithCapacity: 50];
[string appendString: @"Hello here"];
[string appendFormat: @"human %d!",39];
//得到最后结果Hello here human 39!

类似的

删除字符串中的字符

- (void) deleteCharactersInRange: (NSRange) range;

NSMutableString是NSString的子类,所以可以使用NSString的所有功能

因此同样可以使用stringWithFormat来创建NSMutableString

 

集合家族 NSArray NSDictionary等

NSArray可以放入任意类型的对象

两个限制:

1 只能存储Objective-C对象,而不能是C基础类型int,float,enum,struct等

2 不能存储零值nil NULL值

可以通过类方法arrayWithObjects创建,以逗号分割对象列表,并最后以nil表示列表结束

NSArray *array;
array=[NSArray arrayWithObjects: @"one",@"two",@"three",nil];

获得对象个数

- (unsigned) count;

取得特定索引处对象

- (id) objectAtIndex: (unsigned int) index;

例如遍历一个数组

int i;
for(i=0;i<[array count];i++){
	NSLog(@"index %d has %@",i,[array objectAtIndex: i]);
}

将字符串切分成数组

-componentsSeparatedByString

将数组合并成字符串

-componentsJoinedByString

可变数组

NSArray是不可变的,类似的NSMutableArray可变

创建新的可变数组

+ (id) arrayWithCapacity: (unsigned) numItems;

在数组末尾添加对象

- (void) addObject: (id) anObject;

删除特定位置对象

- (void) removeObjectAtIndex: (unsigned) index;

枚举 NSEnumerator

通过objectEnumerator向数组请求枚举器

- (NSEnumerator *) objectEnumerator; 

 这似乎类似于Java的迭代器Iterator

使用

NSEnumerator *enumerator;
enumerator=[array objectEnumerator];

可以从后向前浏览集合 reverseObjectEnumerator

请求下一个对象

- (id) nextObject;

当返回nil时表示结束

快速枚举

for(NSString *string in array){
	NSLog(@"I found %@",string);
}
 

NSDictionary 有些类似于Map(散列表,关联数组)

类似的NSDictionary不可变,可变的NSMutableDictionary

创建字典的方法

+ (id) dictionaryWithObjectsAndKeys: (id) firstObject, ...;

例如

Tire *t1=[Tire new];
Tire *t2=[Tire new];
Tire *t3=[Tire new];
Tire *t4=[Tire new];

NSDictionary *tires;

tires=[NSDictionary dictionaryWithObjectsAndKeys: t1, @"front=left", t2, @"front-right", t3, @"back-left", t4, @"back-right", nil];

使用objectForKey来获取值

- (id) objectForKey: (id) aKey;

例如查找右后轮胎

Tire *tire=[tires objectForKey: @"back-right"];

同样的,对于可变的字典

+ (id) dictionaryWithCapacity: (unsigned int) numItems;

为可变字典添加元素

- (void) setObject: (id) anObject forKey: (id) aKey;

如果当前已有值,则新值会替代原有的值

删除值

- (void) removeObjectForKey: (id) aKey;

使用但不扩展

不要自己去创建NSString,NSArray,NSDictionary的子类

 

各种数值

就和Java中对int,float等有Integer,Float等对象封装,Objectvie-C也提供了NSNumber的包装类

+ (NSNumber *) numberWithChar: (char) value;
+ (NSNumber *) numberWithInt: (int) value;
+ (NSNumber *) numberWithFloat: (float) value;
+ (NSNumber *) numberWithBool: (BOOL) value;

类似的还有long,long long等

例如将一个包装后的数据放入数组

NSNumber *number;
number=[NSNumber numberWithInt: 42];
[array addObject: number];
[dictionary setObject: num forKey: @"Bork"];

从包装类获取值

- (char) charValue;
- (int) intValue;
- (NSString *) stringValue;

 等

 

NSValue

NSNumber是NSValue的子类,NSValue可以包装任意值

+ (NSValue *) valuseWithBytes: (const void *) value
	objCType: (const char *) type;

例如,将NSRect放入NSArray

NSRect rect=NSMakeRect(1,2,3,4);

NSValue *value;
value=[NSValue valueWithBytes: &rect
	objCType: @encode(NSRect)];
[array addObject: value];

这里使用@encode编译器指令,它可以接受数据类型的名称并转化为合适的字符串

使用getValue取值

- (void) getValue: (void *) value;

传递的是存储该数值的变量地址

value=[array objectAtIndex: 0];
[value getValue: &rect];

Cocoa提供了常用的将struct型数据转换成NSValue的方法

+ (NSValue *) valueWithPoint: (NSPoint) point;
+ (NSValue *) valueWithSize: (NSSize) size;
+ (NSValue *) valueWithRect: (NSRect) rect;
 

- (NSPoint) pointValue;
- (NSSize) sizeValue;
- (NSRect) rectValue;

例如,在NSArray中存储和检索NSRect

value=[NSValue valueWithRect: rect];
[array addObject: value];
...
NSRect anotherRect=[value rectValue];
 

NSNull

之前提到nil在NSArray和NSDictionary中有特殊的含义,所以不能把nil放入其中,如果要真的表示没有,Objectvie-C提供了NSNull

使用[NSNull null]==来比较是否为空

 


    
[2] 在Activity中利用AChartEngine (ACE)展示图表
    来源: 互联网  发布时间: 2014-02-18
在Activity中利用AChartEngine (ACE)显示图表.

在Activity中利用AChartEngine (ACE)显示图表.

基本思路: 设定数据,渲染器,并且显示到GraphicsView中 .

 

具体操作:

1.布局文件(itemchartactivity.xml)中增加:

<LinearLayout android:id="@+id/chart" 
 android:orientation="horizontal"
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="0.72"/>

 

2 .AndoridManifest.xml中增加:

<activity android:name="org.achartengine.GraphicalActivity" />

 
3.itemChartActivity中增加:

  private AbstractDemoChart mChart; 
  private XYMultipleSeriesDataset mDataset;    //数据集
 private XYMultipleSeriesRenderer mRenderer;  //渲染器
 private GraphicalView mChartView; //显示图表
 private LinearLayout layout; //用于绑定图表控件。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.itemchartactivity); 
        
        mChart = new AbstractDemoChart(this); 
        
      /******* 1.构建数据. ********/
        //标题
        titles = new String[] { "New tickets","平均值"}; 
        //时间轴 , 数值  
        getDataXY(titles.length);    //通过访问数据库,给dates, values 赋值.
        mDataset = mChart.buildDateDataset(titles, dates, values);
        
        /*******2.构建显示时用的渲染图*/
        getRenderer();
        /*******3.在GraphicalView中显示.*/
        layout = (LinearLayout) findViewById(R.id.chart);       //绑定控件
        mChartView = ChartFactory.getTimeChartView(this, mDataset, mRenderer, "MM/dd/yyyy");
        layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

    
[3] 15 个变量跟方法命名的最佳实践[转]
    来源: 互联网  发布时间: 2014-02-18
15 个变量和方法命名的最佳实践[转]

15 个变量和方法命名的最佳实践

  • 在每个代码范围内使用足够短和足够长的名称:例如循环计算器用一个字符就可以了,如i;条件和循环变量用一个单词,方法名1-2个单词,类名2-3个单词,全局变量3-4个单词组成
  • 为变量指定一些专门名称,不要使用例如 "value", "equals", "data" 这样的变量名
  • 变量名要使用有意义的名称,通过变量名能大概反映出其具体的用途
  • 不要在变量名前加前缀,例如 o_, obj_, m_ 之类
  • 服从公司命名规范,在命名时使用一致的做法,例如:txtUserName, lblUserName, cmbSchoolType, ... 除非是大大降低了可读性
  • 服从编程语言本身的规范,不要使用不连贯的小写和大写混合名称,例如:userName, UserName, USER_NAME, m_userName, username, ...
  •  
    • 类名使用驼峰命名方式,如:VelocityResponseWriter
    • 包名小写:net.oschina.beans.xxx
    • 变量名小写开始的驼峰命名,例如:studentParentName
    • 常量名用全大写:MAX_PARAMETER_COUNT = 100
    • 枚举类名参考普通类名,枚举变量使用全大写
    • 不使用任何带下划线的命名方式(OSCHINA项目大量采用带下划线的变量,哈哈),除非是常量或者是枚举值
    • 对 Java 而言:
  • 不要在同一个类的不同上下文中重用相同的变量名
  • 不要在一个方法内用同一个变量做不同的用途
  • 不要使用非 ASCII 字符的变量,例如中文变量
  • 不要使用太长的变量名,例如50个字符,这很难阅读,而且可能超出一些编译器的限制
  • 确定并坚持使用固定的一种自然语言的命名方式,例如不要使用拼音和英文混合的命名方式
  • 方法名要使用有意义的名称,能通过方法名大概了解该方法的用途,而且方法名要以动词开始,例如createPasswordHash
  • 方法名要符合公司统一的规范,例如:getTxtUserName(), getLblUserName(), isStudentApproved()
  • 方法名要遵循编程语言规范
  • 方法的参数名要使用有意义的名称

  •     
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android中通过view方式获取当前Activity的屏幕截... iis7站长之家
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3