当前位置:  编程技术>移动开发
本页文章导读:
    ▪object c 基础的货色了        object c 基础的东西了! object c的语法:XCode:你可以把它看成是一个开发环境,就好像Visual Studio或者Netbeans或者SharpDevelop一样的玩意。你可以将Interface Builder认为是Visual Studio中用来画界面的.........
    ▪ 模拟器与真机的差别        模拟器与真机的区别 android 1.模拟器与真机的区别 >模拟器不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼叫>模拟器不支持USB连接>模拟器不支持相机/视频捕捉>模拟器不支.........
    ▪ popupwindow练习题       popupwindow练习 今天查资源练习了这个的使用,对于焦点问题,整的脑袋有点大,不知道是模拟器原因 还是 程序原因,在弹出窗口里德按钮点击效果总是不明显。有时弹出窗口显示时,返.........

[1]object c 基础的货色了
    来源: 互联网  发布时间: 2014-02-18
object c 基础的东西了!
object c的语法:

XCode:你可以把它看成是一个开发环境,就好像Visual Studio或者Netbeans或者SharpDevelop一样的玩

意。你可以将Interface Builder认为是Visual Studio中用来画界面的那部分功能单独提出来的程序。
Objective-C:这是一种语言,就好像c++是一种语言,Java是一种语言,c#是一种语言,莺歌历史也是一

种语言一样。
Cocoa:是一大堆函数库,就好像MFC、.NET、Swing这类玩意,人家已经写好了一堆现成的东西,你只要

知道怎么用就可以了。

减号表示一个函数、或者方法、或者消息的开始
括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。
同一个数组可以保存不同的对象

C用NULL,OC用nil
Objective-C 有种叫做 id 的型别,它的运作有时候像是 void*,不过它却严格规定只能用在对象。
基本类别库 import NSObject.h;BOOL型为YES or NO
#import vs #include:#import。#import 由 gcc 编译器支持。我并不建议使用 #include,#import 基

本上跟 .h 档头尾的 #ifndef #define #endif 相同。
Objective-C 的预设扩展名是 .m

类:@interface... @end
Implementation 以 @implementation ClassName 开始,以 @end 结束,用来定义类里的函数
继承(inheritance)以 Class: Parent 表示,就像上面的 Fraction: NSObject
在 Objective-C 中呼叫 methods 的方法是 [object method],就像 C++ 的 object->method()
[object init] 是一个建构子(constructor)呼叫,负责初始化对象中的所有变量。
[frac setNumerator: 1] 非常简单。它呼叫了 frac 上的 setNumerator method 并传入 1 为参数
Objective-C 也有一个用以释放内存的方式: release
传递多重参数用set..and:[frac2 setNumerator: 1 andDenominator: 5];单重时只用set
加入其它参数的方法就跟加入第二个时一样,即 method:label1:label2:label3: ,而呼叫的方法是 obj

method: param1 label1: param2 label2: param3 label3: param4]

建构子(Constructors)
@interface 里的宣告就如同正常的函式
@implementation 使用了一个新的关键词:super
使用 [super init] 来存取 Super constructor,这个动作需要适当的继承设计

存取权限
预设的权限是 @protected
就像 C++ 中 private: [list of vars] public: [list of vars] 的格式,它只是改成了@private,

@protected, 等等

Class level access
static int count = 0; 这是 class variable 宣告的方式。+(int) initCount; 这是回传 count 值的

实际 method。+(void) initialize method is 在 Objective-C 开始执行你的程序时被呼叫,而且它也

被每个 class 呼叫。

异常情况(Exceptions)
注意:异常处理只有 Mac OS X 10.3 以上才支持
Exceptions(异常情况)的丢出不需要扩充(extend)NSException 对象,你可简单的用 id 来代表它:

@catch ( id e ) { ... }


继承、多型(Inheritance, Polymorphism)以及其它对象导向功能

Objective-C 与 Java 跟 C++ 不一样,你在呼叫一个对象的 method 时,并不需要知道这个对象的型别

。当然这个 method 一定要存在,这称为 Objective-C 的讯息传递。你不需要知道你呼叫 method 的那

个东西是什么型别,如果这个对象对这个讯息有反应,那就会唤起这个 method。

继承(Inheritance)
当你扩充你的 super class(所以只能有一个 parent),你想自订这个 super class 的 method,只要

简单的在你的 child class implementation 里放上新的实作内容即可。

动态识别(Dynamic types)
如-(BOOL) isKindOfClass: classObj,即is object a descendent or member of classObj

Categories
当你想要为某个 class 新增 methods,你通常会扩充(extend,即继承)它。然而这不一定是个完美解

法,特别是你想要重写一个 class 的某个功能,但你却没有原始码时。Categories 允许你在现有的

class 加入新功能,但不需要扩充它。Ruby 语言也有类似的功能。包括-(Fraction*) add: (Fraction*)

f; -(Fraction*) mul: (Fraction*) f; -(Fraction*) div: (Fraction*) f; -(Fraction*) sub:

(Fraction*) f;等

Posing
Posing 有点像 categories,但是不太一样。它允许你扩充一个 class,并且全面性地的扮演(pose)这

个 super class。如果你让 NSArrayChild 扮演 NSArray,则在你的程序代码中所有的 NSArray 都会自

动被替代为 NSArrayChild。[FractionB poseAsClass: [Fraction class]];

Protocols
Objective-C 里的 Protocol 与 Java 的 interface 或是 C++ 的 purely virtual class 相同。
protocol 的宣告十分简单,基本上就是 @protocol ProtocolName (methods you must implement) @end
要遵从(conform)某个 protocol,将要遵从的 protocols 放在 <> 里面,并以逗点分隔。如:

@interface SomeClass <Protocol1, Protocol2, Protocol3> 。
protocol 要求实作的 methods 不需要放在 header 档里面的 methods 列表中。
可以使用 @protocol 来测试对象是否遵从接口。如果对象遵从这个接口,[object conformsToProtocol:
@protocol( SomeProtocol )] 会回传一个 YES 型态的 BOOL 对象。



内存管理

Retain and Release(保留与释放)
Retain 以及 release 是两个继承自 NSObject 的对象都会有的 methods。每个对象都有一个内部计数器

,可以用来追踪对象的 reference 个数。如果对象有 3 个 reference 时,不需要 dealloc 自己。但是

如果计数器值到达 0 时,对象就得 dealloc 自己。[object retain] 会将计数器值加 1(值从 1 开始

),[object release] 则将计数器值减 1。如果呼叫 [object release] 导致计数器到达 0,就会自动

dealloc。
你可以呼叫 [obj retainCount] 来取得计数器的 int 值。

Dealloc
当你的对象包含其它对象时,就得在 dealloc 自己时释放它们。Objective-C 的一个优点是你可以传递

讯息给 nil,所以不需要经过一堆防错测试来释放一个对象。
每个 set method 里的三个动作的顺序非常重要。假设你把自己当参数传给一个自己的 method(有点怪

,不过确实可能发生)。若你先 release,「然后」才 retain,你会把自己给解构(destruct,相对于

建构)!这就是为什么应该要 1) retain 2) release 3) 设值 的原因

Autorelease Pool
当你想用 NSString 或其它 Foundation framework classes 来做更多程序设计工作时,你需要一个更有

弹性的系统,也就是使用 Autorelease pools。当开发 Mac Cocoa 应用程序时,autorelease pool 会自

动地帮你设定好。
#import <Foundation/NSAutoreleasePool.h>
在 Objective-C 有两种管理内存的方法, 1) retain and release or 2) retain and

release/autorelease。对于每个 retain,一定要对应一个 release 「或」一个 autorelease。


Foundation framework classes

Foundation framework 地位如同 C++ 的 Standard Template Library。不过 Objective-C 是真正的动

态识别语言(dynamic types),所以不需要像 C++ 那样肥得可怕的样版(templates)。这个 ramework

包含了对象组、网络、执行绪,还有更多好东西。

NSArray
数组有两种(通常是 Foundation classes 中最数据导向的部分),NSArray 跟 NSMutableArray,顾名

思义,mutable(善变的)表示可以被改变,而 NSArray 则不行。这表示你可以制造一个 NSArray 但却

不能改变它的长度。
NSArray *arr = [[NSArray alloc] initWithObjects: @"Me", @"Myself", @"I", nil];
排序(sorting)展示如何用 selector 来排序一个对象
NSEnumerator 很像 Java 的列举系统

NSDictionary
#import <Foundation/NSDictionary.h> (不明白包含哪些东东)

    
[2] 模拟器与真机的差别
    来源: 互联网  发布时间: 2014-02-18
模拟器与真机的区别

android

1.模拟器与真机的区别

>模拟器不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼叫
>模拟器不支持USB连接
>模拟器不支持相机/视频捕捉
>模拟器不支持音频输入(捕捉),但支持输出(重放)
>模拟器不支持扩展耳机
>模拟器不能确定连接状态
>模拟器不能确定电池电量水平和充电状态
>模拟器不能确定SD卡的插入/弹出
>模拟器不支持蓝牙

2.模拟器使用注意事项
>必须手工清理模拟器运行后产生的tmp后辍的临时文件,否则有可能造成硬盘空间不足.清理目录为:

C:\Documents and Settings\Administrator\Local Settings\Temp\AndroidEmulator
>在开启模拟器后不关闭可解决在Eclipse中启动模拟器时间较长的问题

以上内容来自:<<Google+Android开发入门与实战>>


    
[3] popupwindow练习题
    来源: 互联网  发布时间: 2014-02-18
popupwindow练习
今天查资源练习了这个的使用,对于焦点问题,整的脑袋有点大,不知道是模拟器原因 还是 程序原因,在弹出窗口里德按钮点击效果总是不明显。有时弹出窗口显示时,返回键感觉不好使,退出整个程序。晕了。不过收益还是挺大的了,学会使用了。有的时候alertdialog给他setView也是可行的,在android ophone 完全开发讲义 上那个悬浮的activity也很好,设置android:theme属性。
activity的代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
import android.widget.Toast;

public class TestPopwindow extends Activity {
    /** Called when the activity is first created. */
	private TextView txChange=null;
	private Button btShowWindow=null;
	private PopupWindow pop=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        View popview=this.getLayoutInflater().inflate(R.layout.popwindow,null);
		pop=new PopupWindow(popview,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
		pop.setAnimationStyle(android.R.anim.slide_in_left);
		pop.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.screen_background_light));
		pop.setOnDismissListener(new OnDismissListener()//消失监听
		{

			public void onDismiss() {
				// TODO Auto-generated method stub
				System.out.println("TestPopWindow.pop.OnDismissListener");
				Toast.makeText(TestPopwindow.this,"悬浮消失",Toast.LENGTH_SHORT).show();
			}
			
		});
//		pop.setTouchable(true);//设置pop是否可以点击,默认是true,为false时点击屏幕响应的是屏幕的,里面的控件无焦点
//		pop.setTouchInterceptor(new OnTouchListener()//pop的touchable设为true,监听发生在pop上的触屏事件,在屏幕上的事件也是可以响应的
//		{
//
//			public boolean onTouch(View v, MotionEvent event) {
//				// TODO Auto-generated method stub
//				System.out.println("TestPopWindow.pop.OnTouchInterceptor");
////				pop.dismiss();
//				return true;
//			}
//			
//		});
		pop.setOutsideTouchable(true);//默认是false,控制pop是否监听pop以外的触屏事件。这个方法在pop可触,并且no focusable时有意义。这意味着在pop外点击屏幕,
        findViews();					//触屏是在后面的activity响应的。在pop内touch无效,在外时 pop dismiss,按钮可点
        btShowWindow.setOnClickListener(ShowWindow);
    }

	@Override
	public boolean onTouchEvent(MotionEvent event) {//在popwindow出现时不触发,他也是有焦点的,
//		popwindow不设置setOutsideTouchable(false),setTouchable(true),setTouchInterceptor,点击popwindow外部,消失
		// TODO Auto-generated method stub
		System.out.println("TestPopWindow.onTouchEvent");
		return super.onTouchEvent(event);
	}

	Button.OnClickListener ShowWindow=new Button.OnClickListener(){

		public void onClick(View v) {
			// TODO Auto-generated method stub
			showPopWindow();
		}
    };
    
    private void showPopWindow() {
		// TODO Auto-generated method stub
    	View popcontentview=pop.getContentView();
    	TextView tvinfor=(TextView) popcontentview.findViewById(R.id.textview_popwindow_showinfo);
    	tvinfor.setText("测试窗口");
    	ImageView iview=(ImageView) popcontentview.findViewById(R.id.imageview_popwindow_showimage);
    	iview.setImageResource(R.drawable.android11);
    	Button btTest=(Button) popcontentview.findViewById(R.id.button_popwindow_showinfo);
    	btTest.requestFocus();//pop set touchable 为true,并且pop 有焦点,显示点击效果
    	pop.setFocusable(true);
    	System.out.println("btTest.hasFocus()========"+btTest.hasFocus());//popupwindow中的按钮无焦点
    	System.out.println("pop.isFocusable()========"+pop.isFocusable());//输出 true
    	
    	System.out.println("TestPopwindow.this.hasWindowFocus()===="+TestPopwindow.this.hasWindowFocus());
		System.out.println("TestPopwindow.this.pop.isFocusable()===="+TestPopwindow.this.pop.isFocusable());
//    	btTest.hasFocus();
    	btTest.setOnClickListener(new  Button.OnClickListener()
    	{

			public void onClick(View v) {
				// TODO Auto-generated method stub
				TextView poptextview=(TextView)pop.getContentView().findViewById(R.id.textview_popwindow_showinfo);
				System.out.println("TestPopwindow.pop.btTest.click.v===="+v.getId());
				poptextview.setText("after click");
				txChange.setText("have changed");
//				pop.dismiss();
			}
    	});
		pop.setWidth(200);//设置这个悬浮的宽高尺寸
		pop.setHeight(300);
		pop.setAnimationStyle(R.style.PopupAnimation);//设置出现和消失的动画
		pop.showAtLocation(findViewById(R.id.linearlayout_main_show),Gravity.CENTER|Gravity.CENTER, 0,0);
	}
	
	private void findViews() {
		// TODO Auto-generated method stub
		btShowWindow=(Button)findViewById(R.id.button_main_showwindow);
		txChange=(TextView)findViewById(R.id.textview_main_showchange);
	}
}

pop布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/linearlayout_popwindow_view"
  android:background="#b0000000"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <ImageView
  android:id="@+id/imageview_popwindow_showimage"
  android:src="/blog_article/@drawable/icon/index.html"
  android:layout_marginLeft="10dip"
  android:layout_marginTop="30dip"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  />
  <TextView
  android:id="@+id/textview_popwindow_showinfo"
  android:text="information"
  android:textSize="18dip"
  android:layout_marginTop="15dip"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
   <Button
  android:id="@+id/button_popwindow_showinfo"
  android:text="buttontest"
  android:textSize="18dip"
  android:layout_marginTop="15dip"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
</LinearLayout>

动画效果借助了eoeandroid上的效果http://www.eoeandroid.com/thread-48051-1-1.html


    
最新技术文章:
▪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提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3