Fork me on GitHub

2/28/2011

[iOS] 更新地標後,調整地圖適當大小!

Under iOS 4.2.1, the mapView:didAddAnnotationViews: method is not being called when the user's location is updated

改用 (void)mapView:(MKMapView *)mv didUpdateUserLocation:(MKUserLocation *)userLocation

所以要在更新 user 位置後調整地圖至適當的大小:

- (void)mapView:(MKMapView *)mv didUpdateUserLocation:(MKUserLocation *)userLocation {
    MKCoordinateRegion region = 
        MKCoordinateRegionMakeWithDistance([userLocation coordinate], 250, 250);
    
[mv setRegion:region animated:YES];
}

參考 forums.bignerdranch.com • View topic - Whereami under iOS 4.2.1

...

2/18/2011

Base Class 應該要有 virtual destructor

base class 沒有把 destructor 宣告為 virtual,當 derived class 透過 base class 指標被刪除的時候,呼叫的並不是 derived class 的 destructor,而是只呼叫了 base class 的 destructor。

#include <iostream>
using namespace std;

class Base{
public:
  ~Base() {
    cout << "base destructor" << endl;
  }
};

class Derived: public Base {
public:
  ~Derived() {
    cout << "derived constructor" << endl;
  }
};

int main(int argc, const char* argv[]) {

  {
    Derived d;
  }

  cout << "=========" << endl;

  Base *b = new Derived;
  delete b;

  return 0;

}

執行結果為:

derived constructor
base destructor
=========
base destructor



#include <iostream>
using namespace std;

class Base{
public:
    virtual ~Base() { // 這裡加上 virtual
    cout << "base destructor" << endl;
  }
};

class Derived: public Base {
public:
  ~Derived() {
    cout << "derived constructor" << endl;
  }
};

int main(int argc, const char* argv[]) {

  {
    Derived d;
  }

  cout << "=========" << endl;

  Base *b = new Derived;
  delete b;

  return 0;

}

執行結果為:

derived constructor
base destructor
=========
derived constructor
base destructor


...