当前位置: 代码迷 >> Iphone >> iPhone 札记
  详细解决方案

iPhone 札记

热度:431   发布时间:2016-04-25 06:26:30.0
iPhone 笔记
#

@interface Event : NSManagedObject {}
@property (nonatomic, retain) NSDate *creationDate;
@property (nonatomic, retain) NSNumber *latitude;
@property (nonatomic, retain) NSNumber *longitude;
@end

#import "Event.h"
@implementation Event
@dynamic creationDate;
@dynamic latitude;
@dynamic longitude;
@end

从上面我们能看出来,一个实体Event也就会被生成一个NSManagedObject(被管理对象),然后任何accessor和getter 都是被动态生成的,我们其实完全不用操任何的心,只需要在xcdatamodel文件里面配置后,点击添加文件,添加NSManagedObject文件,就会看到自动感知的类对象,然后生成就可以了。
下面是根视图控制器,是一个列表视图(UITableViewController)

#import <CoreLocation/CoreLocation.h>
@interface RootViewController : UITableViewController <CLLocationManagerDelegate> {
//看到是UITableViewController的子类,由于需要使用Core Location,
//所以在后面履行其protocal
NSMutableArray *eventsArray;
NSManagedObjectContext *managedObjectContext;
//这个被管理对象内容器就是我们真正对Core Data数据的操作对象
CLLocationManager *locationManager; //用来得到地理位置的Core Location对象
UIBarButtonItem *addButton; //右上角的添加键
}
@property (nonatomic, retain) NSMutableArray *eventsArray;
@property (nonatomic, retain) [...]

CoreData 实例分析学习(1)补

CoreData实例分析学习(1)
补一下“实体”的概念,实体也就是Entity,在打开xcdatamodel文件的时候,我们可以看到

在这里,这个实体叫“Event”,而实体的参数有“创建日期”,“纬度”,“经度”。也就是说,其实这个实体被使用后,我们可以这样理解,实体就是表名,而参数就是列名,然后整个实体就是一张表。当这个Model描述多个实体的关系的时候,就像是一个关系型数据库一样,虽然苹果说“不是!”

CoreData 实例分析学习(1)

Core Data是个好东西,在数据储存操作上速度快,容易操作,是一种类似关系数据库的东西。但是有些不那么好学,那到底Core Data是怎么操作的呢?怎么用呢?怎么来编程呢?我们一起来学习吧,接下来使用苹果提供的实例程序Locations来作分析:
>程序介绍:
右侧是改程序的截图,基本上来说就是通过使用Core Location来得到当时的位置,然后在点击“+”的时候记录下当时的经纬度。通过UITableViewController的功能来添加,编辑,删除等功能。整体程序使用Core Data来储存数据,实体(Entity)为一个位置,包括以下参数:1,时间(收集数据的时间)2,纬度,3,经度
首先我们看看该程序的AppDelegate.h

@interface LocationsAppDelegate : NSObject {
UIWindow *window;
UINavigationController *navigationController; //导航栏

//以下定义了Core Data的三个决定性组建,等后面m文件里面再多介绍
NSPersistentStoreCoordinator *persistentStoreCoordinator;
NSManagedObjectModel *managedObjectModel;
NSManagedObjectContext *managedObjectContext;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) UINavigationController *navigationController;

- (IBAction)saveAction:sender; //这个没找到作用…根本就没用到IB

//还记得吧,nonatomic是因为这个程序是单线程
@property (nonatomic, retain, readonly) [...]

得到用户的首选语言

NSUserDefaults* defs = [NSUserDefaults standardUserDefautls];
//得到用户缺省值

NSArray* languages = [defs objectForKey:@"AppleLanguages"];
//在缺省值中找到AppleLanguages, 返回值是一个数组

NSString* preferredLang = [languages objectAtIndex:0];
//在得到的数组中的第一个项就是用户的首选语言了

简单 iPhone视频播放器(1)补

在使用MP库之前是需要将其导入的,上次忘记了,这回将截图发上来
首先在左侧找到Targets
然后打开,双击这个工程名
你就可以看到下面的图了

点击左下角的+号

找到MediaPlayer.framework

然后点Add,完成!!
之后就只需要在需要使用库的地方添加下面的代码拉~

#import "MediaPlayer/MediaPlayer.h"


简单 iPhone视频播放器(1)

本程序源代码,不包含视频文件
视频播放在iPhone中是再重要不过了,今天要在30行内解决iPhone视频播放的问题!
1,建立工程MPtest1

2, 建立一个UIViewController类 MyMPViewController

3, 设置MPtest1AppDelegate初始化并添加MyMPViewController的view到window

@interface MPtest1AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
MyMPViewController *mpViewController;
}
@end
- (void)applicationDidFinishLaunching:(UIApplication *)application {
mpViewController = [[MyMPViewController alloc] init];
[window addSubview:mpViewController.view];
[window makeKeyAndVisible];
}

4, 设置MyMPViewController在一个按钮点击后播放视频

@interface MyMPViewController : UIViewController {
UIButton *playButton;
}
@end

@interface MyMPViewController()
- (void)playVideo;
@end
@implementation MyMPViewController
- (id)init
{
if (self = [super init]) {
playButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
//在这里初始化那个按键
playButton.frame = CGRectMake(100, 100, 100, 30);
[self.view addSubview:playButton];
}
return self;
}

- (void)viewDidLoad [...]

retain 和copy的区别

原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢?
assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。
Retain vs. Copy!!

copy: 建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1

那上面的是什么该死的意思呢?
Copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString对象,地址为0×1111,内容为@”STR”
Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化
retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了…

在 iPhone上显示LCD效果

我看到一个程序是这样样子的:

哇!好厉害,怎么弄出来的!难道要用Q2D画出来么?
不… …
其实这就是UILabel外加一个奇异的字体 DBLCDTempBlack
And, that’s it! 生活多么美好阿~

不要对 viewController作这样的事情

错误:

UIViewController *aViewController = [[UIViewController alloc] init];

[window addSubview:aViewController.view];

[aViewController release];

这样的话,系统会崩溃的… window或着其他父视图是不会retain整个viewController的,这个时候不能立刻release
正确:

[aViewController.view removeFromSuperview];

[aViewController release];

也就是说,在release之前需要从superview中移除这个viewController的view。如果一直都需要这个view,那就在 dealloc里面作这些事情就可以了

数据类型/ 对象类型介绍(1)NSString

字符串是程序设计最常用的数据类型之一了。在Mac/iPhone编程中,苹果为我们提供了一个不同的字符串类型 NSString。有别与普通的String为数据类型,NSString其实是一个对象类型。NSString是NSObject(Cocoa Foundation的基础对象)的子类,所以具有NSObject的所有特性,好的和好的… ….
小常识:
NS是Cocoa类对象类型的前缀,来源于史蒂夫-乔布斯被苹果开除那段时间建立的公司NeXT.
@是Cocoa元素的前缀,很多地方我们会看到,比如接下来…
1, 创建一个NSString对象
简单方法:

NSString *aString = @"我是个NS字符串!"; //除了引号外加@, 没别的区别

*上面的不需要操心内存管理哟~
复杂一点儿:(需要内存管理的)

NSString *aString = [[NSString alloc] initWithFormat:@"这也是个NS字符串!"];

*initWithFormat是其中一个初始化方法,常用的还有

//从一个文件读取需要的内容
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
//从一个地址读取需要的内容
- (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error

*以上方法得到的NSString的retain值为1,所以记得release掉阿~~
2,使用一个NSString对象

NSString *aString = @"This is a NSString";

NSLog(aString); //在控制台输出信息,该函数方法需要一个NSString对象作为参数

NSLog("这样不会好使的");

NSLog(@"这样就会好使拉~");

再比如设置一个UIView的标题:

[UIView setTitle:aString];

[UIView setTitle:@"标题"];

UIView.title = aString;

3,释放NSString

[aString release]; //对象将被系统释放掉咯

*记得不要释放直接用 = @”xxx” 的NSString对象哟,系统会管的~
4,快速使用一个NSString

NSLog([NSString stringWithFormat:@"一个NS字符串"]);

//这种快速方法返回的是一个retain为1,autorelease的对象,不需要操心它的内存管理
5,常用方法
我喜欢NSString的地方就在于很多方法非常方便,比如:

nString = [aString substringToIndex:4]; //nString将得到aString中的前四个字符


1 楼 Random.Ghost 2010-05-27  
楼主果然是经过研究才写上来的..受益了...
2 楼 dazuiba 2010-06-06  
不错,   Iphone的帖子太少了,  投精先!

说object-c 2支持 dot方式的消息传递,也就是支持 aString.substringToIndex(4)

那现在的Iphone用的哪个版本的object-c? 
3 楼 xupf1977 2010-07-14  
很有用,谢谢分享
  相关解决方案