------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 结构体
在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发。常用的结构体有NSRange、NSPoint、NSSize、NSRect等
//
// Created by 裴涛涛 on 15/5/11.
// Copyright (c) 2015年 裴涛涛. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);
NSSize s1 = CGSizeMake(33, 44);
NSSize s2 = NSMakeSize(35, 21);
CGSize s3 = NSMakeSize(90, 80);
CGRect r1 = CGRectMake(0, 0, 20, 84);
NSString *tt = NSStringFromRect(r1);
NSLog(@"%@",tt);
return 0;
}
void range()
{
// NSRange r3 = NSMakeRange(2, 4);
NSString *str = @"i love oc";
NSRange range = [str rangeOfString:@"ptt"];
NSLog(@"loc = %ld, length = %ld",range.location,range.length);
}
不可变字符串
在ObjC中字符串操作要比在C语言中简单的多,在下面的例子中你将看到字符串的初始化、大小写转化、后缀前缀判断、字符串比较、字符串截取、字符串转换等,通过下面的例子我们基本可以掌握常用的字符串操作(注意这些内容虽然基本,但却是十分常用的操作,需要牢记):
可变字符串
我们知道在字符串操作过程中我们经常希望改变原来的字符串,当然这在C语言中实现比较复杂,但是ObjC为我们提供了新的可变字符串类NSMutableString,它是NSString的子类。
3.数组
不可变数组
常用的数组操作:初始化、数组对象的方法执行、数组元素的遍历、在原有数组基础上产生新数组、数组排序等
注意点
NSArray中只能存放对象,不能存放基本数据类型。
数组中的元素后面必须加nil以表示数据结束
// Copyright (c) 2015年 裴涛涛. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
Person *p = [[Person alloc] init];
//
NSArray *array = @[p,@"ptt 5",@"zaixiang"];
// for (int i = 0; i < array.count; i++) {
// NSLog(@"%@",array[i]);
// }
for(id obj in array)
{
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld is %@",i,obj);
}
return 0;
}
void test ()
{
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",s6);
}
void test2()
{
[@"ptt\nptt" writeToFile:@"/Users/peitaotao/Desktop/总结.m" atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
可变数组
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
NSMutableArray *array = [NSMutableArray array];
[array addObject:[[Person alloc] init]];
[array addObject:@"ptt"];
NSLog(@"%ld",array.count);
return 0;
}
<pre name="code" class="html">#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
<pre name="code" class="html">#import "Person.h"
@implementation Person
@end
<span style="white-space:pre"> </span>计算代码行数的练习
<span style="white-space:pre"> </span><pre name="code" class="html">// Copyright (c) 2015年 裴涛涛. All rights reserved.
//
/*
*考察NSString、NSArray的使用
*NSFileManager
*/
#import <Foundation/Foundation.h>
NSUInteger codeLineCount(NSString *path)
/*
path:文件的全路径(可能是文件夹、也可能是文件)
返回值int:代码行数
*/
{
//1.获得文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];
//2. 标记是否为文件夹
BOOL dir = NO;
//标记这个路径是否存在
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
//如果不存在直接返回0
if(!exist)
{
NSLog(@"文件路径不存在");
return 0;
}
if (dir)
{
// NSLog(@"是个文件夹");
//获得当前文件夹path下面的所有内容(文件、文件夹)
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
int count = 0;
//遍历数组中的所有子文件(夹)名
for (NSString *filename in array)
{
//获得子文件(夹)的全路径
NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,filename];
//NSLog(@"%@",fullPath);
count += codeLineCount(fullPath);
}
return count;
//
// NSLog(@"%@",array);
}
else
{
// NSLog(@"是个文件");
//判断文件的拓展名(忽略大小写)
NSString *extension = [[path pathExtension] lowercaseString];
if( ![extension isEqualToString:@"h"]
&& ![extension isEqualToString:@"m"]
&& ![extension isEqualToString:@"c"])
{
return 0;
}
//加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// NSLog(@"%@",content);
//将文件内容分割为每一行
NSArray *array = [content componentsSeparatedByString:@"\n" ];
//打印文件路径和行数
NSLog(@"%@----%d",path,array.count);
return array.count;
}
/*
int i = 0;
for (NSString *line in array)
{
NSLog(@"%d++++++%@",i,line);
i++;
}
*/
}
int main(int argc, const char * argv[]) {
int count = codeLineCount(@"/Users/peitaotao/Desktop");
NSLog(@"%d",count);
return 0;
}